ItEr39S17CUImportacionOrganizacionsTraballo: Adding properly messages and checks about mandatory attributes to OrderLine and HoursGroup.

This commit is contained in:
Manuel Rego Casasnovas 2009-12-17 19:09:36 +01:00 committed by Javier Moran Rua
parent e2241b40ca
commit 4690e79f54
7 changed files with 135 additions and 4 deletions

View file

@ -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"));
}

View file

@ -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<HoursGroup> getHoursGroups() {
return new ArrayList<HoursGroup>(hoursGroups);
@ -312,7 +314,10 @@ public class OrderLine extends OrderElement {
private Integer calculateTotalHours(Set<HoursGroup> hoursGroups) {
Integer result = 0;
for (HoursGroup hoursGroup : hoursGroups) {
result += hoursGroup.getWorkingHours();
Integer workingHours = hoursGroup.getWorkingHours();
if (workingHours != null) {
result += workingHours;
}
}
return result;
}

View file

@ -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;
}

View file

@ -115,6 +115,7 @@ public class ResourceAllocationDAOTest {
orderElementDAO.save(orderLine);
HoursGroup hoursGroup = HoursGroup.create(orderLine);
hoursGroup.setName("hoursGroupName");
hoursGroupDAO.save(hoursGroup);
List<HoursGroup> hoursGroups = Arrays.asList(hoursGroup);

View file

@ -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());

View file

@ -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);

View file

@ -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<InstanceConstraintViolationsDTO> instanceConstraintViolationsList = orderElementService
.addOrder(orderDTO).instanceConstraintViolationsList;
assertThat(instanceConstraintViolationsList.size(), equalTo(1));
List<ConstraintViolationDTO> 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<InstanceConstraintViolationsDTO> instanceConstraintViolationsList = orderElementService
.addOrder(orderDTO).instanceConstraintViolationsList;
assertThat(instanceConstraintViolationsList.size(), equalTo(1));
List<ConstraintViolationDTO> 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<InstanceConstraintViolationsDTO> instanceConstraintViolationsList = orderElementService
.addOrder(orderDTO).instanceConstraintViolationsList;
assertThat(instanceConstraintViolationsList.size(), equalTo(1));
List<ConstraintViolationDTO> 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<InstanceConstraintViolationsDTO> instanceConstraintViolationsList = orderElementService
.addOrder(orderDTO).instanceConstraintViolationsList;
assertThat(instanceConstraintViolationsList.size(), equalTo(0));
assertThat(orderElementDAO.findByCode(code).size(),
equalTo(previous + 1));
}
}