public void testRemovePlan() {
Person person = PopulationUtils.getFactory().createPerson(Id.create(5, Person.class));
Plan p1 = PersonUtils.createAndAddPlan(person, false);
Plan p2 = PersonUtils.createAndAddPlan(person, true);
Plan p3 = PersonUtils.createAndAddPlan(person, false);
Plan p4 = PersonUtils.createAndAddPlan(person, false);
Plan p5 = PopulationUtils.createPlan(null);
assertEquals("wrong number of plans.", 4, person.getPlans().size());
assertEquals("expected different selected plan.", p2, person.getSelectedPlan());
assertTrue(person.removePlan(p3));
assertEquals("wrong number of plans.", 3, person.getPlans().size());
assertEquals("expected different selected plan.", p2, person.getSelectedPlan());
assertFalse(person.removePlan(p5));
assertEquals("wrong number of plans.", 3, person.getPlans().size());
assertTrue(person.removePlan(p2));
assertEquals("wrong number of plans.", 2, person.getPlans().size());
assertNotSame("removed plan still set as selected.", p2, person.getSelectedPlan());
assertFalse("plan cannot be removed twice.", person.removePlan(p2));
assertEquals("wrong number of plans.", 2, person.getPlans().size());
assertTrue(person.removePlan(p1));
assertTrue(person.removePlan(p4));
assertEquals("wrong number of plans.", 0, person.getPlans().size());
}