From 9ddd9764b174ec6c3f1e0d5e2ecf82253940b2d0 Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 20 Apr 2011 17:06:39 +0200 Subject: [PATCH] [Bug #1005] subcontracted task sends each progress measurement correctly. To update a progress measurement first one, it is looked for a progress measurement with the same exact date, and if this one does not exists it adds a new progress measurement. FEA: ItEr74S04BugFixing --- .../impl/ReportAdvancesServiceREST.java | 2 +- .../ReportAdvancesServiceTest.java | 98 ++++++++++++++++--- 2 files changed, 86 insertions(+), 14 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java index 56f88d001..d0e6ca90e 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/subcontract/impl/ReportAdvancesServiceREST.java @@ -159,7 +159,7 @@ public class ReportAdvancesServiceREST implements IReportAdvancesService { for (AdvanceMeasurementDTO advanceMeasurementDTO : orderElementWithAdvanceMeasurementsDTO.advanceMeasurements) { AdvanceMeasurement advanceMeasurement = advanceAssignmentSubcontractor - .getAdvanceMeasurement(DateConverter + .getAdvanceMeasurementAtExactDate(DateConverter .toLocalDate(advanceMeasurementDTO.date)); if (advanceMeasurement == null) { advanceAssignmentSubcontractor diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java index aff8f1d6e..8efa0a4bf 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -34,9 +34,12 @@ import static org.navalplanner.web.test.WebappGlobalNames.WEBAPP_SPRING_SECURITY import java.math.BigDecimal; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.Map.Entry; import javax.annotation.Resource; @@ -150,10 +153,11 @@ public class ReportAdvancesServiceTest { Order order = givenOrder(); String orderElementCode = order.getChildren().get(0).getCode(); - Date date = new Date(); - BigDecimal value = new BigDecimal(20); + Map values = givenValidMapValues(1, 0, + BigDecimal.ZERO); + OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( - orderElementCode, date, value); + orderElementCode, values); reportAdvancesService .updateAdvances(orderElementWithAdvanceMeasurementsListDTO); @@ -172,22 +176,62 @@ public class ReportAdvancesServiceTest { assertThat(directAdvanceAssignmentSubcontractor .getAdvanceMeasurements().size(), equalTo(1)); - AdvanceMeasurement advanceMeasurement = directAdvanceAssignmentSubcontractor - .getAdvanceMeasurements().first(); - assertThat(advanceMeasurement.getDate(), equalTo(LocalDate - .fromDateFields(date))); - assertThat(advanceMeasurement.getValue(), equalTo(value)); + for (Entry entry : values.entrySet()) { + AdvanceMeasurement advanceMeasurement = directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements().first(); + assertThat(advanceMeasurement.getDate(), equalTo(entry.getKey())); + assertThat(advanceMeasurement.getValue(), equalTo(entry.getValue())); + } + } + + @Test + public void validAdvancesReportWithSeveralDates() { + Order order = givenOrder(); + String orderElementCode = order.getChildren().get(0).getCode(); + + int numMeasures = 3; + Map values = givenValidMapValues(numMeasures, 5, + BigDecimal.TEN); + assertThat(values.size(), equalTo(numMeasures)); + + OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( + orderElementCode, values); + reportAdvancesService + .updateAdvances(orderElementWithAdvanceMeasurementsListDTO); + + Order foundOrder = orderDAO.findExistingEntity(order.getId()); + assertNotNull(foundOrder); + assertThat(foundOrder.getChildren().size(), equalTo(1)); + + OrderElement orderElement = foundOrder.getChildren().get(0); + assertNotNull(orderElement); + + DirectAdvanceAssignment directAdvanceAssignmentSubcontractor = orderElement + .getDirectAdvanceAssignmentSubcontractor(); + assertNotNull(directAdvanceAssignmentSubcontractor); + assertTrue(directAdvanceAssignmentSubcontractor + .getReportGlobalAdvance()); + assertThat(directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements().size(), equalTo(numMeasures)); + + assertThat(directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements().size(), equalTo(values.size())); + + for (AdvanceMeasurement measure : directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements()) { + assertTrue(values.containsKey(measure.getDate())); + assertTrue(values.containsValue(measure.getValue())); + assertThat(values.get(measure.getDate()), equalTo(measure + .getValue())); + } } private OrderElementWithAdvanceMeasurementsListDTO givenOrderElementWithAdvanceMeasurementsListDTO( - String orderElementCode, Date date, BigDecimal value) { + String orderElementCode, Map values) { OrderElementWithAdvanceMeasurementsDTO orderElementWithAdvanceMeasurementsDTO = new OrderElementWithAdvanceMeasurementsDTO(); orderElementWithAdvanceMeasurementsDTO.code = orderElementCode; - Set advanceMeasurementDTOs = new HashSet(); - advanceMeasurementDTOs.add(new AdvanceMeasurementDTO(DateConverter - .toXMLGregorianCalendar(date), value)); - orderElementWithAdvanceMeasurementsDTO.advanceMeasurements = advanceMeasurementDTOs; + orderElementWithAdvanceMeasurementsDTO.advanceMeasurements = givenAdvanceMeasurementDTOs(values); ExternalCompany externalCompany = getSubcontractorExternalCompanySaved( "Company", "company-nif"); @@ -197,6 +241,34 @@ public class ReportAdvancesServiceTest { .asList(orderElementWithAdvanceMeasurementsDTO)); } + private Set givenAdvanceMeasurementDTOs( + Map values) { + Set advanceMeasurementDTOs = new HashSet(); + for (Entry entry : values.entrySet()) { + advanceMeasurementDTOs.add(new AdvanceMeasurementDTO(DateConverter + .toXMLGregorianCalendar(entry.getKey()), entry.getValue())); + } + return advanceMeasurementDTOs; + } + + private Map givenValidMapValues(int iterations, + int separatorDay, BigDecimal separatorPercentage) { + Map values = new HashMap(); + LocalDate currentDate = new LocalDate(); + BigDecimal currentValue = new BigDecimal(10); + + for (int i = 0; i < iterations; i++) { + values.put(currentDate, currentValue); + currentDate = currentDate.plusDays(separatorDay); + currentValue = currentValue.add(separatorPercentage); + if (currentValue.compareTo(new BigDecimal(100)) >= 0) { + break; + } + } + + return values; + } + private Order givenOrder() { return transactionService .runOnAnotherTransaction(new IOnTransaction() {