From bf3f952de75df0e0c87949f22bee2258e70da27f Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Wed, 30 Jun 2010 12:54:42 +0200 Subject: [PATCH] ItEr60S04ValidacionEProbasFuncionaisItEr59S04 : Fixing bug in CostCategory Service. it showsthe error messages when the importation is incorrect. --- .../costcategories/entities/HourCost.java | 3 ++ .../ws/costcategories/api/HourCostDTO.java | 15 +++++--- .../impl/CostCategoryConverter.java | 26 +++++++------ .../CostCategoryServiceTest.java | 38 +++++++++++++++++-- 4 files changed, 61 insertions(+), 21 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/HourCost.java b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/HourCost.java index 9ae0feb06..952ba895a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/HourCost.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/costcategories/entities/HourCost.java @@ -142,6 +142,9 @@ public class HourCost extends IntegrationEntity { @AssertTrue(message="The end date cannot be before the init date") public boolean checkPositiveTimeInterval() { + if (initDate == null) { + return true; + } if (endDate == null) { return true; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/api/HourCostDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/api/HourCostDTO.java index b1f9ad32a..5f045c63f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/api/HourCostDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/api/HourCostDTO.java @@ -1,9 +1,9 @@ package org.navalplanner.ws.costcategories.api; import java.math.BigDecimal; -import java.util.Date; import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.datatype.XMLGregorianCalendar; import org.navalplanner.business.costcategories.entities.HourCost; import org.navalplanner.ws.common.api.IntegrationEntityDTO; @@ -20,10 +20,10 @@ public class HourCostDTO extends IntegrationEntityDTO { public BigDecimal priceCost; @XmlAttribute - public Date initDate; + public XMLGregorianCalendar initDate; @XmlAttribute - public Date endDate; + public XMLGregorianCalendar endDate; @XmlAttribute(name = "work-hours-type") public String type; @@ -31,8 +31,10 @@ public class HourCostDTO extends IntegrationEntityDTO { public HourCostDTO() { } - public HourCostDTO(String code, BigDecimal priceCost, Date initDate, - Date endDate, String type) { + public HourCostDTO(String code, BigDecimal priceCost, + XMLGregorianCalendar initDate, + XMLGregorianCalendar endDate, + String type) { super(code); this.initDate = initDate; @@ -46,7 +48,8 @@ public class HourCostDTO extends IntegrationEntityDTO { * facilitate the implementation of test cases that add new instances (such * instances will have a unique code). */ - public HourCostDTO(BigDecimal priceCost, Date initDate, Date endDate, + public HourCostDTO(BigDecimal priceCost, XMLGregorianCalendar initDate, + XMLGregorianCalendar endDate, String type) { this(generateCode(), priceCost, initDate, endDate, type); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/impl/CostCategoryConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/impl/CostCategoryConverter.java index 73f782627..8e8c83839 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/impl/CostCategoryConverter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/costcategories/impl/CostCategoryConverter.java @@ -22,10 +22,11 @@ package org.navalplanner.ws.costcategories.impl; import static org.navalplanner.web.I18nHelper._; -import java.util.Date; import java.util.HashSet; import java.util.Set; +import javax.xml.datatype.XMLGregorianCalendar; + import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import org.navalplanner.business.common.Registry; @@ -34,6 +35,7 @@ import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.costcategories.entities.CostCategory; import org.navalplanner.business.costcategories.entities.HourCost; import org.navalplanner.business.costcategories.entities.TypeOfWorkHours; +import org.navalplanner.ws.common.impl.DateConverter; import org.navalplanner.ws.costcategories.api.CostCategoryDTO; import org.navalplanner.ws.costcategories.api.HourCostDTO; @@ -65,15 +67,16 @@ public class CostCategoryConverter { public final static HourCostDTO toDTO(HourCost hourCost) { - Date initDate = null; + XMLGregorianCalendar initDate = null; if (hourCost.getInitDate() != null) { - initDate = hourCost.getInitDate().toDateTimeAtCurrentTime() - .toDate(); + initDate = DateConverter.toXMLGregorianCalendar(hourCost + .getInitDate()); } - Date endDate = null; + XMLGregorianCalendar endDate = null; if (hourCost.getEndDate() != null) { - endDate = hourCost.getEndDate().toDateTimeAtCurrentTime().toDate(); + endDate = DateConverter.toXMLGregorianCalendar(hourCost + .getEndDate()); } String type = null; @@ -108,15 +111,16 @@ public class CostCategoryConverter { // Mandatory properties LocalDate initDate = null; if(hourCostDTO.initDate != null){ - initDate = LocalDate.fromDateFields(hourCostDTO.initDate); + initDate = DateConverter.toLocalDate(hourCostDTO.initDate); } //Create new hour cost - HourCost hourCost = HourCost.createUnvalidated(hourCostDTO.code, hourCostDTO.priceCost, initDate); + HourCost hourCost = HourCost.createUnvalidated(hourCostDTO.code, + hourCostDTO.priceCost, initDate); // optional properties if (hourCostDTO.endDate != null) { - hourCost.setEndDate(LocalDate.fromDateFields(hourCostDTO.endDate)); + hourCost.setEndDate(DateConverter.toLocalDate(hourCostDTO.endDate)); } if (hourCostDTO.type != null) { @@ -168,7 +172,7 @@ public class CostCategoryConverter { // Mandatory properties LocalDate initDate = null; if (hourCostDTO.initDate != null) { - initDate = LocalDate.fromDateFields(hourCostDTO.initDate); + initDate = DateConverter.toLocalDate(hourCostDTO.initDate); } // Create new hour cost @@ -176,7 +180,7 @@ public class CostCategoryConverter { // optional properties if (hourCostDTO.endDate != null) { - hourCost.setEndDate(LocalDate.fromDateFields(hourCostDTO.endDate)); + hourCost.setEndDate(DateConverter.toLocalDate(hourCostDTO.endDate)); } if (hourCostDTO.type != null) { diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/costcategories/CostCategoryServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/costcategories/CostCategoryServiceTest.java index f5903a6cd..be76b0b39 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/costcategories/CostCategoryServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/costcategories/CostCategoryServiceTest.java @@ -37,6 +37,8 @@ import java.util.List; import java.util.Set; import java.util.UUID; +import javax.xml.datatype.XMLGregorianCalendar; + import org.hibernate.SessionFactory; import org.joda.time.LocalDate; import org.junit.Test; @@ -49,6 +51,7 @@ import org.navalplanner.business.costcategories.entities.CostCategory; import org.navalplanner.business.costcategories.entities.HourCost; import org.navalplanner.business.costcategories.entities.TypeOfWorkHours; import org.navalplanner.ws.common.api.InstanceConstraintViolationsDTO; +import org.navalplanner.ws.common.impl.DateConverter; import org.navalplanner.ws.costcategories.api.CostCategoryDTO; import org.navalplanner.ws.costcategories.api.CostCategoryListDTO; import org.navalplanner.ws.costcategories.api.HourCostDTO; @@ -124,8 +127,13 @@ public class CostCategoryServiceTest { // Valid cost category DTO with a hour cost Set cc3_HourCostDTOs = new HashSet(); + + XMLGregorianCalendar initDate = DateConverter + .toXMLGregorianCalendar(new Date()); + XMLGregorianCalendar endDate = initDate; + HourCostDTO cc3_1_HourCostDTO = new HourCostDTO(new BigDecimal(3), - new Date(), new Date(), typeOfWorkHoursCodeA); + initDate, endDate, typeOfWorkHoursCodeA); cc3_HourCostDTOs.add(cc3_1_HourCostDTO); CostCategoryDTO cc3 = new CostCategoryDTO("cc3", true, cc3_HourCostDTOs); @@ -177,8 +185,13 @@ public class CostCategoryServiceTest { final String hourCostCode = "code-HC"; Set cc1_HourCostDTOs = new HashSet(); + + XMLGregorianCalendar initDate = DateConverter + .toXMLGregorianCalendar(new Date()); + XMLGregorianCalendar endDate = initDate; + HourCostDTO cc1_1_HourCostDTO = new HourCostDTO(hourCostCode,new BigDecimal(3), - new Date(), new Date(), typeOfWorkHoursCodeA); + initDate, endDate, typeOfWorkHoursCodeA); cc1_HourCostDTOs.add(cc1_1_HourCostDTO); CostCategoryDTO cc1 = new CostCategoryDTO(costCategoryCode,"newCC1", true, cc1_HourCostDTOs); @@ -190,6 +203,7 @@ public class CostCategoryServiceTest { hourCostDAO.flush(); /* Test. */ + assertTrue(instanceConstraintViolationsList.toString(), instanceConstraintViolationsList.size() == 0); assertTrue(costCategoryDAO.existsByCode(cc1.code)); @@ -197,6 +211,14 @@ public class CostCategoryServiceTest { try { costCategory = costCategoryDAO.findByCode(cc1.code); assertTrue(costCategory.getHourCosts().size() == 1); + HourCost hourCost = hourCostDAO.findByCode(hourCostCode); + LocalDate currentDate = LocalDate.fromDateFields(new Date()); + assertTrue(hourCost.getInitDate().compareTo(currentDate) == 0); + assertFalse(hourCost.getEndDate() == null); + assertTrue(hourCost.getEndDate().compareTo(hourCost.getInitDate()) == 0); + assertTrue(hourCost.getPriceCost().compareTo(new BigDecimal(3)) == 0); + assertTrue(hourCost.getType().getCode().equalsIgnoreCase( + typeOfWorkHoursCodeA)); } catch (InstanceNotFoundException e) { assertTrue(false); } @@ -206,8 +228,14 @@ public class CostCategoryServiceTest { // Update the previous cost category Set cc2_HourCostDTOs = new HashSet(); + + XMLGregorianCalendar initDate2 = DateConverter + .toXMLGregorianCalendar(new Date()); + XMLGregorianCalendar endDate2 = DateConverter + .toXMLGregorianCalendar(getNextMonthDate()); + HourCostDTO cc2_1_HourCostDTO = new HourCostDTO(hourCostCode, - new BigDecimal(100), getNextMonthDate(), getNextMonthDate(), + new BigDecimal(100), initDate2, endDate2, typeOfWorkHoursCodeB); cc2_HourCostDTOs.add(cc2_1_HourCostDTO); CostCategoryDTO cc2 = new CostCategoryDTO(costCategoryCode,"updateCC1", false, cc2_HourCostDTOs); @@ -235,8 +263,10 @@ public class CostCategoryServiceTest { HourCost hourCost = hourCostDAO.findByCode(cc1_1_HourCostDTO.code); LocalDate nextMonthDate = LocalDate .fromDateFields(getNextMonthDate()); - assertTrue(hourCost.getInitDate().compareTo(nextMonthDate) == 0); + assertTrue(hourCost.getInitDate().compareTo( + LocalDate.fromDateFields(new Date())) == 0); assertFalse(hourCost.getEndDate() == null); + assertTrue(hourCost.getEndDate().compareTo(nextMonthDate) == 0); assertTrue(hourCost.getPriceCost().compareTo(new BigDecimal(100)) == 0); assertTrue(hourCost.getType().getCode().equalsIgnoreCase( typeOfWorkHoursCodeB));