ItEr21S09CUIntroducionAvanceUnidadeTraballoItEr20S07: check the children of any orderElement no have other assignment with same advance type
This commit is contained in:
parent
a2c2cd0d17
commit
c6a5636ab2
2 changed files with 42 additions and 12 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue