From 6fb8c09ac0dc4f3da4ff13151531f776d98c96ea Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 15 Dec 2010 18:58:36 +0100 Subject: [PATCH] [Bug #751] Fixed CostCategoryServiceTest for MySQL database. FEA: ItEr65S06BugFixing --- .../CostCategoryServiceTest.java | 209 ++++++++++++------ 1 file changed, 143 insertions(+), 66 deletions(-) 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 0b127db0d..2f0e2b52b 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 @@ -43,6 +43,8 @@ import org.hibernate.SessionFactory; import org.joda.time.LocalDate; import org.junit.Test; import org.junit.runner.RunWith; +import org.navalplanner.business.common.IAdHocTransactionService; +import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.costcategories.daos.ICostCategoryDAO; import org.navalplanner.business.costcategories.daos.IHourCostDAO; @@ -57,6 +59,7 @@ import org.navalplanner.ws.costcategories.api.CostCategoryListDTO; import org.navalplanner.ws.costcategories.api.HourCostDTO; import org.navalplanner.ws.costcategories.api.ICostCategoryService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.NotTransactional; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -93,6 +96,9 @@ public class CostCategoryServiceTest { private final String typeOfWorkHoursCodeB = "code-B"; + @Autowired + private IAdHocTransactionService transactionService; + @Test @Rollback(false) public void createAPairTypeOfWorkHours() { @@ -178,56 +184,100 @@ public class CostCategoryServiceTest { } @Test - public void testUpdateCostCategory() throws InstanceNotFoundException { + @NotTransactional + public void testUpdateCostCategory() throws InstanceNotFoundException { - //First one it creates Valid cost category DTO with a hour cost - final String costCategoryCode = "code-CC"; - final String hourCostCode = "code-HC"; + // First one it creates Valid cost category DTO with a hour cost + final String costCategoryCode = "code-CC"; + final String hourCostCode = "code-HC"; - Set cc1_HourCostDTOs = new HashSet(); + Set cc1_HourCostDTOs = new HashSet(); XMLGregorianCalendar initDate = DateConverter .toXMLGregorianCalendar(new Date()); XMLGregorianCalendar endDate = initDate; - HourCostDTO cc1_1_HourCostDTO = new HourCostDTO(hourCostCode,new BigDecimal(3), - initDate, endDate, typeOfWorkHoursCodeA); - cc1_HourCostDTOs.add(cc1_1_HourCostDTO); - CostCategoryDTO cc1 = new CostCategoryDTO(costCategoryCode,"newCC1", true, cc1_HourCostDTOs); + final HourCostDTO cc1_1_HourCostDTO = new HourCostDTO(hourCostCode, + new BigDecimal(3), initDate, endDate, typeOfWorkHoursCodeA); + cc1_HourCostDTOs.add(cc1_1_HourCostDTO); + final CostCategoryDTO cc1 = new CostCategoryDTO(costCategoryCode, + "newCC1", + true, cc1_HourCostDTOs); - CostCategoryListDTO costCategoryListDTO = createCostCategoryListDTO(cc1); + CostCategoryListDTO costCategoryListDTO = createCostCategoryListDTO(cc1); - List instanceConstraintViolationsList = costCategoryService - .addCostCategories(costCategoryListDTO).instanceConstraintViolationsList; - costCategoryDAO.flush(); - hourCostDAO.flush(); + List instanceConstraintViolationsList = costCategoryService + .addCostCategories(costCategoryListDTO).instanceConstraintViolationsList; + transactionService.runOnTransaction(new IOnTransaction() { + @Override + public Void execute() { + costCategoryDAO.flush(); + hourCostDAO.flush(); + return null; + } + }); - /* Test. */ + /* Test. */ + assertTrue(instanceConstraintViolationsList.toString(), + instanceConstraintViolationsList.size() == 0); + transactionService.runOnTransaction(new IOnTransaction() { + @Override + public Void execute() { + assertTrue(costCategoryDAO.existsByCode(cc1.code)); + return null; + } + }); + final CostCategory costCategory = transactionService + .runOnTransaction(new IOnTransaction() { + @Override + public CostCategory execute() { + CostCategory cost; + try { + cost = costCategoryDAO.findByCode(cc1.code); + cost.getHourCosts().size(); + return cost; + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + }); + assertTrue(costCategory.getHourCosts().size() == 1); + + final HourCost hourCost = transactionService + .runOnTransaction(new IOnTransaction() { + @Override + public HourCost execute() { + try { + HourCost cost = hourCostDAO + .findByCode(hourCostCode); + cost.getType().getCode(); + return cost; + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + }); + 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)); + + transactionService.runOnTransaction(new IOnTransaction() { + @Override + public Void execute() { + costCategoryDAO.flush(); + sessionFactory.getCurrentSession().evict(costCategory); + return null; + } + }); - assertTrue(instanceConstraintViolationsList.toString(), - instanceConstraintViolationsList.size() == 0); - assertTrue(costCategoryDAO.existsByCode(cc1.code)); - CostCategory costCategory = null; - 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); - } - costCategoryDAO.flush(); - sessionFactory.getCurrentSession().evict(costCategory); costCategory.dontPoseAsTransientObjectAnymore(); - // Update the previous cost category - Set cc2_HourCostDTOs = new HashSet(); + // Update the previous cost category + Set cc2_HourCostDTOs = new HashSet(); XMLGregorianCalendar initDate2 = DateConverter .toXMLGregorianCalendar(new Date()); @@ -235,44 +285,71 @@ public class CostCategoryServiceTest { .toXMLGregorianCalendar(getNextMonthDate()); HourCostDTO cc2_1_HourCostDTO = new HourCostDTO(hourCostCode, - new BigDecimal(100), initDate2, endDate2, - typeOfWorkHoursCodeB); + new BigDecimal(100), initDate2, endDate2, typeOfWorkHoursCodeB); cc2_HourCostDTOs.add(cc2_1_HourCostDTO); - CostCategoryDTO cc2 = new CostCategoryDTO(costCategoryCode,"updateCC1", false, cc2_HourCostDTOs); + CostCategoryDTO cc2 = new CostCategoryDTO(costCategoryCode, + "updateCC1", false, cc2_HourCostDTOs); /* Cost category type list. */ - costCategoryListDTO = createCostCategoryListDTO(cc2); + costCategoryListDTO = createCostCategoryListDTO(cc2); instanceConstraintViolationsList = costCategoryService - .addCostCategories(costCategoryListDTO).instanceConstraintViolationsList; + .addCostCategories(costCategoryListDTO).instanceConstraintViolationsList; - /* Test. */ - assertTrue(instanceConstraintViolationsList.toString(), + /* Test. */ + assertTrue(instanceConstraintViolationsList.toString(), instanceConstraintViolationsList.size() == 0); - assertTrue(costCategoryDAO.existsByCode(cc1.code)); - assertTrue(hourCostDAO.existsByCode(cc1_1_HourCostDTO.code)); + transactionService.runOnTransaction(new IOnTransaction() { + @Override + public Void execute() { + assertTrue(costCategoryDAO.existsByCode(cc1.code)); + assertTrue(hourCostDAO.existsByCode(cc1_1_HourCostDTO.code)); + return null; + } + }); - // Check if the changes was updated - try { - costCategory = costCategoryDAO - .findByCode(costCategoryCode); - assertTrue(costCategory.getHourCosts().size() == 1); - assertTrue(costCategory.getName().equalsIgnoreCase("updateCC1")); - assertFalse(costCategory.getEnabled()); + final CostCategory costCategory2 = transactionService + .runOnTransaction(new IOnTransaction() { + @Override + public CostCategory execute() { + CostCategory cost; + try { + cost = costCategoryDAO.findByCode(costCategoryCode); + cost.getHourCosts().size(); + return cost; + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + }); - HourCost hourCost = hourCostDAO.findByCode(cc1_1_HourCostDTO.code); - LocalDate nextMonthDate = LocalDate - .fromDateFields(getNextMonthDate()); - 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)); - } catch (InstanceNotFoundException e) { - assertTrue(false); - } + // Check if the changes was updated + assertTrue(costCategory2.getHourCosts().size() == 1); + assertTrue(costCategory2.getName().equalsIgnoreCase("updateCC1")); + assertFalse(costCategory2.getEnabled()); + + final HourCost hourCost2 = transactionService + .runOnTransaction(new IOnTransaction() { + @Override + public HourCost execute() { + try { + HourCost cost = hourCostDAO + .findByCode(cc1_1_HourCostDTO.code); + cost.getType().getCode(); + return cost; + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + }); + LocalDate nextMonthDate = LocalDate.fromDateFields(getNextMonthDate()); + assertTrue(hourCost2.getInitDate().compareTo( + LocalDate.fromDateFields(new Date())) == 0); + assertFalse(hourCost2.getEndDate() == null); + assertTrue(hourCost2.getEndDate().compareTo(nextMonthDate) == 0); + assertTrue(hourCost2.getPriceCost().compareTo(new BigDecimal(100)) == 0); + assertTrue(hourCost2.getType().getCode().equalsIgnoreCase( + typeOfWorkHoursCodeB)); } private Date getNextMonthDate() {