From bfba19592fcfdb160a294a8a93f031bd31e382de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 10 Aug 2009 21:22:26 +0200 Subject: [PATCH] ItEr21S09CUIntroducionAvanceUnidadeTraballoItEr20S07: Several improvements. Specifying the exact exception that must be thrown in the catch. Test names improved. Not testing all in a test. That's an anti-pattern. Just testing one thing at each test. Simplifying the fixture. Not setting up more data than needed in order to setup test. No need to save the order in all tests, just in one test to check it works. --- ...ddAdvanceAssigmentsToOrderElementTest.java | 188 ++++++------------ 1 file changed, 58 insertions(+), 130 deletions(-) diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java index 8795eb91d..ac3bd3730 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java @@ -106,7 +106,7 @@ public class AddAdvanceAssigmentsToOrderElementTest { * advanceAssigment of {@link OrderElement}. */ @Test - public void testSetAdvanceAssigmentEmptyOrderElement() throws Exception{ + public void savingTheOrderSavesAlsoTheAddedAssigments() throws Exception { Order order = createValidOrder(); OrderElement orderLine = createValidLeaf("OrderLineA", "1k1k1k1k"); @@ -124,8 +124,6 @@ public class AddAdvanceAssigmentsToOrderElementTest { order.add(orderLine); orderDao.save(order); this.sessionFactory.getCurrentSession().flush(); - assertTrue(orderDao.exists(order.getId())); - assertTrue(orderElementDao.exists(orderLine.getId())); assertFalse(orderLine.getAdvanceAssigments().isEmpty()); assertTrue(advanceAssigmentDao.exists(advanceAssigment.getId())); @@ -144,7 +142,7 @@ public class AddAdvanceAssigmentsToOrderElementTest { * the list a new {@link AdvanceAssigment} of diferent type. */ @Test - public void testSetOtherAdvanceAssigmentOrderElement() throws Exception { + public void addingSeveralAssignmentsOfDifferentTypes() throws Exception { Order order = createValidOrder(); OrderLine orderLine = createValidLeaf("OrderLineA", "1111111"); @@ -171,8 +169,8 @@ public class AddAdvanceAssigmentsToOrderElementTest { * DuplicateAdvanceAssigmentForOrderElementException Exception. */ @Test - public void testSetOtherAdvanceAssigmentOrderElementIllegal() throws Exception{ - Order order = createValidOrder(); + public void cannotAddDuplicatedAssignment() + throws Exception { OrderLine orderLine = createValidLeaf("OrderLineA", "22222222"); AdvanceType advanceTypeA = createAndSaveType("tipoA"); @@ -180,18 +178,16 @@ public class AddAdvanceAssigmentsToOrderElementTest { AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true); advanceAssigmentA.setAdvanceType(advanceTypeA); - order.add(orderLine); - orderDao.save(order); - orderLine.addAvanceAssigment(advanceAssigmentA); AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(false); advanceAssigmentB.setAdvanceType(advanceTypeA); + try { orderLine.addAvanceAssigment(advanceAssigmentB); fail("It should throw an exception"); - } catch (Exception e) { - // Ok } } + } catch (DuplicateAdvanceAssigmentForOrderElementException e) { + // Ok } } @@ -202,8 +198,7 @@ public class AddAdvanceAssigmentsToOrderElementTest { * DuplicateValueTrueReportGlobalAdvanceException Exception. */ @Test - public void testSetWithSameReportGloblalAdvance() throws Exception{ - Order order = createValidOrder(); + public void cannotAddTwoAssignmetsWithGlobalReportValue() throws Exception { OrderLine orderLine = createValidLeaf("OrderLineA", "101010101"); AdvanceType advanceTypeA = createAndSaveType("tipoA"); @@ -212,8 +207,6 @@ public class AddAdvanceAssigmentsToOrderElementTest { AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true); advanceAssigmentA.setAdvanceType(advanceTypeA); - order.add(orderLine); - orderDao.save(order); orderLine.addAvanceAssigment(advanceAssigmentA); @@ -224,8 +217,6 @@ public class AddAdvanceAssigmentsToOrderElementTest { fail("It should throw an exception "); } catch (DuplicateValueTrueReportGlobalAdvanceException e) { // Ok - } catch (Exception e) { - fail("It should not throw an exception"); } } @@ -235,163 +226,100 @@ public class AddAdvanceAssigmentsToOrderElementTest { * not throw any exception. **/ @Test - public void testSetAdvanceAssigmentOrdeElementSon() throws Exception{ - final Order order = createValidOrder(); - final OrderElement[] containers = new OrderLineGroup[2]; - for (int i = 0; i < containers.length; i++) { - containers[i] = OrderLineGroup.create(); - containers[i].setName("bla"); - containers[i].setCode("000000000"); - order.add(containers[i]); - } - OrderLineGroup container = (OrderLineGroup) containers[0]; - final OrderElement[] orderElements = new OrderElement[4]; - for (int i = 0; i < orderElements.length; i++) { - OrderLine leaf = createValidLeaf("bla", "787887"); - orderElements[i] = leaf; - container.add(leaf); - } - - for (int i = 1; i < containers.length; i++) { - OrderLineGroup orderLineGroup = (OrderLineGroup) containers[i]; - OrderLine leaf = createValidLeaf("foo", "156325"); - orderLineGroup.add(leaf); - } + public void addingAssignmentsOfAnotherTypeToSon() throws Exception { + OrderLineGroup container = OrderLineGroup.create(); + container.setName("bla"); + container.setCode("000000000"); + OrderLine son = createValidLeaf("bla", "132"); + container.add(son); AdvanceType advanceTypeA = createAndSaveType("tipoA"); AdvanceType advanceTypeB = createAndSaveType("tipoB"); AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true); advanceAssigmentA.setAdvanceType(advanceTypeA); - AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(true); + AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(false); advanceAssigmentB.setAdvanceType(advanceTypeB); - orderDao.save(order); + + container.addAvanceAssigment(advanceAssigmentA); + son.addAvanceAssigment(advanceAssigmentB); + } + + @Test + public void addingAnAdvanceAssignmentIncreasesTheNumberOfAdvanceAssignments() + throws Exception { + final OrderLineGroup container = OrderLineGroup.create(); + container.setName("bla"); + container.setCode("000000000"); + container.add(createValidLeaf("bla", "979")); + + AdvanceType advanceTypeA = createAndSaveType("tipoA"); + AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true); + advanceAssigmentA.setAdvanceType(advanceTypeA); container.addAvanceAssigment(advanceAssigmentA); assertThat(container.getAdvanceAssigments().size(), equalTo(1)); - assertThat( - container.getChildren().get(0).getAdvanceAssigments().size(), - equalTo(0)); - ((OrderElement) container.getChildren().get(0)) - .addAvanceAssigment(advanceAssigmentB); } - /** - * Trying define an AdvanceAssigment object when any father of OrderElement - * with an AdvanceAssigment object that has the same AdvanceType Expected: - * It must throw DuplicateAdvanceAssigmentForOrderElementException - * Exception. - **/ @Test - public void testSetAdvanceAssigmentOrdeElementSonIllegal() throws Exception{ - final Order order = createValidOrder(); - final OrderElement[] containers = new OrderLineGroup[2]; - for (int i = 0; i < containers.length; i++) { - containers[i] = OrderLineGroup.create(); - containers[i].setName("bla"); - containers[i].setCode("000000000"); - order.add(containers[i]); - } - OrderLineGroup container = (OrderLineGroup) containers[0]; - - final OrderElement[] orderElements = new OrderElement[4]; - for (int i = 0; i < orderElements.length; i++) { - OrderLine leaf = createValidLeaf("bla", "97979"); - orderElements[i] = leaf; - container.add(leaf); - } - - for (int i = 1; i < containers.length; i++) { - OrderLineGroup orderLineGroup = (OrderLineGroup) containers[i]; - OrderLine leaf = createValidLeaf("foo", "797900"); - orderLineGroup.add(leaf); - } + public void cannotAddDuplicatedAssigmentToSon() throws Exception { + final OrderLineGroup father = OrderLineGroup.create(); + father.setName("bla"); + father.setCode("000000000"); + father.add(createValidLeaf("bla", "979")); AdvanceType advanceTypeA = createAndSaveType("tipoA"); AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true); advanceAssigmentA.setAdvanceType(advanceTypeA); - AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(true); - advanceAssigmentB.setAdvanceType(advanceTypeA); + AdvanceAssigment anotherAssigmentWithSameType = createValidAdvanceAssigment(false); + anotherAssigmentWithSameType.setAdvanceType(advanceTypeA); - orderDao.save(order); - container.addAvanceAssigment(advanceAssigmentA); + father.addAvanceAssigment(advanceAssigmentA); - assertThat(container.getAdvanceAssigments().size(), equalTo(1)); - assertThat( - container.getChildren().get(0).getAdvanceAssigments().size(), - equalTo(0)); try { - ((OrderElement) container.getChildren().get(0)) - .addAvanceAssigment(advanceAssigmentB); + OrderElement child = (OrderElement) father.getChildren().get(0); + child.addAvanceAssigment(anotherAssigmentWithSameType); fail("It should throw an exception "); - } catch (Exception e) { + } catch (DuplicateAdvanceAssigmentForOrderElementException e) { // Ok } } - /** - * 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 testSetAdvanceAssigmentOrdeElementParentIllegal() throws Exception{ - final Order order = createValidOrder(); - final OrderElement[] containers = new OrderLineGroup[2]; - for (int i = 0; i < containers.length; i++) { - containers[i] = OrderLineGroup.create(); - containers[i].setName("bla_" + i); - containers[i].setCode("000000000"); - order.add(containers[i]); - } - OrderLineGroup container = (OrderLineGroup) containers[0]; - OrderLineGroup containerSon = (OrderLineGroup) OrderLineGroup.create(); - containerSon.setName("Son"); - containerSon.setCode("11111111"); - container.add(containerSon); - OrderLine orderLineGranSon = createValidLeaf("GranSon", "75757"); - containerSon.add(orderLineGranSon); - final OrderElement[] orderElements = new OrderElement[2]; - for (int i = 1; i < orderElements.length; i++) { - OrderLine leaf = createValidLeaf("bla", "979879"); - orderElements[i] = leaf; - container.add(leaf); - } - for (int i = 1; i < containers.length; i++) { - OrderLineGroup orderLineGroup = (OrderLineGroup) containers[i]; - OrderLine leaf = createValidLeaf("foo", "79799"); - orderLineGroup.add(leaf); - } + public void cannotAddDuplicateAssignmentToGrandParent() throws Exception { + OrderLineGroup parent = OrderLineGroup.create(); + parent.setName("bla_"); + parent.setCode("000000000"); + OrderLineGroup son = (OrderLineGroup) OrderLineGroup.create(); + son.setName("Son"); + son.setCode("11111111"); + parent.add(son); + OrderLine grandSon = createValidLeaf("GranSon", "75757"); + son.add(grandSon); + AdvanceType advanceTypeA = createAndSaveType("tipoA"); AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true); advanceAssigmentA.setAdvanceType(advanceTypeA); - AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(true); + AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(false); advanceAssigmentB.setAdvanceType(advanceTypeA); - orderDao.save(order); - - orderLineGranSon.addAvanceAssigment(advanceAssigmentA); - - assertThat(orderLineGranSon.getAdvanceAssigments().size(), equalTo(1)); + grandSon.addAvanceAssigment(advanceAssigmentA); try { - container.addAvanceAssigment(advanceAssigmentB); + parent.addAvanceAssigment(advanceAssigmentB); fail("It should throw an exception "); - } catch (Exception e) { + } catch (DuplicateAdvanceAssigmentForOrderElementException e) { // Ok } } - @Test(expected = DuplicateAdvanceAssigmentForOrderElementException.class) public void addingAnotherAdvanceAssigmentWithAnEquivalentTypeButDifferentInstance() - throws DuplicateValueTrueReportGlobalAdvanceException, - DuplicateAdvanceAssigmentForOrderElementException { + throws Exception { final Order order = createValidOrder(); OrderLine line = createValidLeaf("GranSon", "75757"); order.add(line);