ItEr21S09CUIntroducionAvanceUnidadeTraballoItEr20S07: check the children of any orderElement no have other assignment with same advance type

This commit is contained in:
Susana Montes Pedreira 2009-08-10 18:38:17 +02:00 committed by Óscar González Fernández
parent a2c2cd0d17
commit c6a5636ab2
2 changed files with 42 additions and 12 deletions

View file

@ -162,7 +162,10 @@ public abstract class OrderElement extends BaseEntity {
throws DuplicateValueTrueReportGlobalAdvanceException,
DuplicateAdvanceAssigmentForOrderElementException {
checkNoOtherGlobalAdvanceAssignment(newAdvanceAssigment);
checkNoOtherAssignmentWithSameAdvanceType(this, newAdvanceAssigment);
checkAncestorsNoOtherAssignmentWithSameAdvanceType(this,
newAdvanceAssigment);
checkChildrenNoOtherAssignmentWithSameAdvanceType(this,
newAdvanceAssigment);
this.advanceAssigments.add(newAdvanceAssigment);
}
@ -187,7 +190,7 @@ public abstract class OrderElement extends BaseEntity {
* @param newAdvanceAssigment
* @throws DuplicateAdvanceAssigmentForOrderElementException
*/
private void checkNoOtherAssignmentWithSameAdvanceType(
private void checkAncestorsNoOtherAssignmentWithSameAdvanceType(
OrderElement orderElement, AdvanceAssigment newAdvanceAssigment)
throws DuplicateAdvanceAssigmentForOrderElementException {
for (AdvanceAssigment advanceAssigment : orderElement
@ -200,9 +203,35 @@ public abstract class OrderElement extends BaseEntity {
}
}
if (orderElement.getParent() != null) {
checkNoOtherAssignmentWithSameAdvanceType(orderElement.getParent(),
newAdvanceAssigment);
checkAncestorsNoOtherAssignmentWithSameAdvanceType(orderElement
.getParent(), newAdvanceAssigment);
}
}
/**
* It checks there are no {@link AdvanceAssigment} with the same type in
* orderElement and its children
* @param orderElement
* @param newAdvanceAssigment
* @throws DuplicateAdvanceAssigmentForOrderElementException
*/
private void checkChildrenNoOtherAssignmentWithSameAdvanceType(
OrderElement orderElement, AdvanceAssigment newAdvanceAssigment)
throws DuplicateAdvanceAssigmentForOrderElementException {
for (AdvanceAssigment advanceAssigment : orderElement
.getAdvanceAssigments()) {
if (AdvanceType.equivalentInDB(advanceAssigment.getAdvanceType(),
newAdvanceAssigment.getAdvanceType())) {
throw new DuplicateAdvanceAssigmentForOrderElementException(
"Duplicate Advance Assigment For Order Element", this,
OrderElement.class);
}
}
if (!orderElement.getChildren().isEmpty()) {
for (OrderElement child : orderElement.getChildren()) {
checkChildrenNoOtherAssignmentWithSameAdvanceType(child,
newAdvanceAssigment);
}
}
}
}

View file

@ -372,13 +372,13 @@ public class AddAdvanceAssigmentsToOrderElementTest {
}
/**
* Trying define an AdvanceAssigment object when any grandfather of
* OrderElement with an AdvanceAssigment object that has the same
* AdvanceType Expected: It must throw
* DuplicateAdvanceAssigmentForOrderElementException Exception.
* Trying define an AdvanceAssigment object when any child of OrderElement
* with an AdvanceAssigment object that has the same AdvanceType Expected:
* It must throw DuplicateAdvanceAssigmentForOrderElementException
* Exception.
**/
@Test
public void testSetAdvanceAssigmentOrdeElementGrandSonIllegal() {
public void testSetAdvanceAssigmentOrdeElementParentIllegal() {
final Order order = createValidOrder();
final OrderElement[] containers = new OrderLineGroup[2];
for (int i = 0; i < containers.length; i++) {
@ -416,21 +416,22 @@ public class AddAdvanceAssigmentsToOrderElementTest {
orderDao.save(order);
try {
container.addAvanceAssigment(advanceAssigmentA);
orderLineGranSon.addAvanceAssigment(advanceAssigmentA);
} catch (Exception e) {
fail("It should not throw an exception ");
}
assertThat(container.getAdvanceAssigments().size(), equalTo(1));
assertThat(orderLineGranSon.getAdvanceAssigments().size(), equalTo(1));
try {
orderLineGranSon.addAvanceAssigment(advanceAssigmentB);
container.addAvanceAssigment(advanceAssigmentB);
fail("It should throw an exception ");
} catch (Exception e) {
// Ok
}
}
@Test(expected = DuplicateAdvanceAssigmentForOrderElementException.class)
public void addingAnotherAdvanceAssigmentWithAnEquivalentTypeButDifferentInstance()
throws DuplicateValueTrueReportGlobalAdvanceException,