From 4690e79f54b6471ab6eddfba7bdb297ec4665bd1 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Thu, 17 Dec 2009 19:09:36 +0100 Subject: [PATCH] ItEr39S17CUImportacionOrganizacionsTraballo: Adding properly messages and checks about mandatory attributes to OrderLine and HoursGroup. --- .../business/orders/entities/HoursGroup.java | 6 +- .../business/orders/entities/OrderLine.java | 7 +- ...dAdvanceAssignmentsToOrderElementTest.java | 1 + .../daos/ResourceAllocationDAOTest.java | 1 + .../test/planner/daos/TaskElementDAOTest.java | 5 +- .../web/orders/OrderModelTest.java | 4 + .../ws/orders/OrderElementServiceTest.java | 115 ++++++++++++++++++ 7 files changed, 135 insertions(+), 4 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java index 5dd90a2d7..6d003895f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; +import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; import org.navalplanner.business.common.BaseEntity; @@ -52,11 +53,12 @@ public class HoursGroup extends BaseEntity implements Cloneable { return create(result); } + @NotEmpty(message = "name (code) not specified") private String name; private ResourceEnum resourceType = ResourceEnum.WORKER; - @NotNull + @NotNull(message = "working hours not specified") private Integer workingHours = 0; private BigDecimal percentage = new BigDecimal(0).setScale(2); @@ -103,7 +105,7 @@ public class HoursGroup extends BaseEntity implements Cloneable { public void setWorkingHours(Integer workingHours) throws IllegalArgumentException { - if (workingHours < 0) { + if ((workingHours != null) && (workingHours < 0)) { throw new IllegalArgumentException( _("Working hours shouldn't be neagtive")); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index e58ee512e..77cb927eb 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.hibernate.validator.Valid; import org.joda.time.LocalDate; import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; @@ -111,6 +112,7 @@ public class OrderLine extends OrderElement { } } + @Valid @Override public List getHoursGroups() { return new ArrayList(hoursGroups); @@ -312,7 +314,10 @@ public class OrderLine extends OrderElement { private Integer calculateTotalHours(Set hoursGroups) { Integer result = 0; for (HoursGroup hoursGroup : hoursGroups) { - result += hoursGroup.getWorkingHours(); + Integer workingHours = hoursGroup.getWorkingHours(); + if (workingHours != null) { + result += workingHours; + } } return result; } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java index e5f5788bf..eb3ad52ae 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java @@ -125,6 +125,7 @@ public class AddAdvanceAssignmentsToOrderElementTest { result.setCode(code); HoursGroup hoursGroup = HoursGroup.create(result); hoursGroup.setWorkingHours(0); + hoursGroup.setName("hoursGroupName"); result.addHoursGroup(hoursGroup); return result; } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java index 7c8dd5a25..698e37522 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/ResourceAllocationDAOTest.java @@ -115,6 +115,7 @@ public class ResourceAllocationDAOTest { orderElementDAO.save(orderLine); HoursGroup hoursGroup = HoursGroup.create(orderLine); + hoursGroup.setName("hoursGroupName"); hoursGroupDAO.save(hoursGroup); List hoursGroups = Arrays.asList(hoursGroup); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java index 046d353a1..32e277dab 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java @@ -113,6 +113,7 @@ public class TaskElementDAOTest { private Task createValidTask() { associatedHoursGroup = new HoursGroup(); + associatedHoursGroup.setName("hoursGroupName"); OrderLine orderLine = createOrderLine(); orderLine.addHoursGroup(associatedHoursGroup); TaskSource taskSource = TaskSource @@ -128,7 +129,9 @@ public class TaskElementDAOTest { OrderLine orderLine = OrderLine.create(); orderLine.setName("bla"); orderLine.setCode("000000000"); - orderLine.addHoursGroup(new HoursGroup()); + HoursGroup hoursGroup = new HoursGroup(); + hoursGroup.setName("hoursGroupName"); + orderLine.addHoursGroup(hoursGroup); Order order = Order.create(); order.setName("bla"); order.setInitDate(new Date()); diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java index 6eded79a9..657c7962c 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java @@ -280,6 +280,7 @@ public class OrderModelTest { result.setCode("000000000"); HoursGroup hoursGroup = HoursGroup.create(result); + hoursGroup.setName("hoursGroupName"); hoursGroup.setWorkingHours(0); result.addHoursGroup(hoursGroup); @@ -311,6 +312,7 @@ public class OrderModelTest { container.add(leaf); order.add(container); HoursGroup hoursGroup = HoursGroup.create(leaf); + hoursGroup.setName("hoursGroupName"); hoursGroup.setWorkingHours(3); leaf.addHoursGroup(hoursGroup); orderModel.setOrder(order); @@ -358,8 +360,10 @@ public class OrderModelTest { order.add(orderLine); HoursGroup hoursGroup = HoursGroup.create(orderLine); + hoursGroup.setName("hoursGroupName"); hoursGroup.setWorkingHours(10); HoursGroup hoursGroup2 = HoursGroup.create(orderLine); + hoursGroup2.setName("hoursGroupName2"); hoursGroup2.setWorkingHours(5); orderLine.addHoursGroup(hoursGroup); diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java index 45ebccc2e..03c7f9667 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/orders/OrderElementServiceTest.java @@ -40,8 +40,11 @@ import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.ws.common.api.ConstraintViolationDTO; import org.navalplanner.ws.common.api.InstanceConstraintViolationsDTO; +import org.navalplanner.ws.common.api.ResourceEnumDTO; +import org.navalplanner.ws.orders.api.HoursGroupDTO; import org.navalplanner.ws.orders.api.IOrderElementService; import org.navalplanner.ws.orders.api.OrderDTO; +import org.navalplanner.ws.orders.api.OrderLineDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -179,4 +182,116 @@ public class OrderElementServiceTest { equalTo(previous + 1)); } + @Test + public void orderWithInvalidOrderLine() { + int previous = orderDAO.getOrders().size(); + + OrderDTO orderDTO = new OrderDTO(); + orderDTO.name = "Order name"; + orderDTO.code = "order-code"; + orderDTO.initDate = new Date(); + + OrderLineDTO orderLineDTO = new OrderLineDTO(); + orderDTO.children.add(orderLineDTO); + + List instanceConstraintViolationsList = orderElementService + .addOrder(orderDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(1)); + + List constraintViolations = instanceConstraintViolationsList + .get(0).constraintViolations; + // Mandatory fields: code, name. Check constraints: + // checkConstraintAtLeastOneHoursGroupForEachOrderElement + assertThat(constraintViolations.size(), equalTo(3)); + + assertThat(orderDAO.getOrders().size(), equalTo(previous)); + } + + @Test + public void orderWithInvalidOrderLineWithoutHoursGroup() { + int previous = orderDAO.getOrders().size(); + + OrderDTO orderDTO = new OrderDTO(); + orderDTO.name = "Order name"; + orderDTO.code = "order-code"; + orderDTO.initDate = new Date(); + + OrderLineDTO orderLineDTO = new OrderLineDTO(); + orderLineDTO.name = "Order line"; + orderLineDTO.code = "order-line-code"; + orderDTO.children.add(orderLineDTO); + + List instanceConstraintViolationsList = orderElementService + .addOrder(orderDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(1)); + + List constraintViolations = instanceConstraintViolationsList + .get(0).constraintViolations; + // Check constraints: + // checkConstraintAtLeastOneHoursGroupForEachOrderElement + assertThat(constraintViolations.size(), equalTo(1)); + + assertThat(orderDAO.getOrders().size(), equalTo(previous)); + } + + @Test + public void orderWithOrderLineWithInvalidHoursGroup() { + int previous = orderDAO.getOrders().size(); + + OrderDTO orderDTO = new OrderDTO(); + orderDTO.name = "Order name"; + orderDTO.code = "order-code"; + orderDTO.initDate = new Date(); + + OrderLineDTO orderLineDTO = new OrderLineDTO(); + orderLineDTO.name = "Order line"; + orderLineDTO.code = "order-line-code"; + HoursGroupDTO hoursGroupDTO = new HoursGroupDTO(); + hoursGroupDTO.resourceType = ResourceEnumDTO.WORKER; + orderLineDTO.hoursGroups.add(hoursGroupDTO); + orderDTO.children.add(orderLineDTO); + + List instanceConstraintViolationsList = orderElementService + .addOrder(orderDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(1)); + + List constraintViolations = instanceConstraintViolationsList + .get(0).constraintViolations; + // Mandatory fields: name, workingHours + assertThat(constraintViolations.size(), equalTo(2)); + for (ConstraintViolationDTO constraintViolationDTO : constraintViolations) { + assertThat(constraintViolationDTO.fieldName, anyOf( + equalTo("HoursGroup::name"), + equalTo("HoursGroup::workingHours"))); + } + + assertThat(orderDAO.getOrders().size(), equalTo(previous)); + } + + @Test + public void validOrderWithOrderLine() { + String code = "order-code"; + int previous = orderElementDAO.findByCode(code).size(); + + OrderDTO orderDTO = new OrderDTO(); + orderDTO.name = "Order name"; + orderDTO.code = code; + orderDTO.initDate = new Date(); + + OrderLineDTO orderLineDTO = new OrderLineDTO(); + orderLineDTO.name = "Order line"; + orderLineDTO.code = "order-line-code"; + HoursGroupDTO hoursGroupDTO = new HoursGroupDTO("hours-group", + ResourceEnumDTO.WORKER, 1000); + orderLineDTO.hoursGroups.add(hoursGroupDTO); + orderDTO.children.add(orderLineDTO); + + List instanceConstraintViolationsList = orderElementService + .addOrder(orderDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(0)); + + assertThat(orderElementDAO.findByCode(code).size(), + equalTo(previous + 1)); + } + }