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 new file mode 100644 index 000000000..110b5a4ac --- /dev/null +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/ReportAdvancesServiceTest.java @@ -0,0 +1,162 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.web.test.ws.subcontract; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.navalplanner.web.WebappGlobalNames.WEBAPP_SPRING_CONFIG_FILE; +import static org.navalplanner.web.WebappGlobalNames.WEBAPP_SPRING_SECURITY_CONFIG_FILE; +import static org.navalplanner.web.test.WebappGlobalNames.WEBAPP_SPRING_CONFIG_TEST_FILE; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import javax.annotation.Resource; + +import org.joda.time.LocalDate; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.navalplanner.business.IDataBootstrap; +import org.navalplanner.business.advance.entities.AdvanceMeasurement; +import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; +import org.navalplanner.business.common.daos.IConfigurationDAO; +import org.navalplanner.business.orders.daos.IOrderDAO; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLine; +import org.navalplanner.ws.common.api.AdvanceMeasurementDTO; +import org.navalplanner.ws.subcontract.api.IReportAdvancesService; +import org.navalplanner.ws.subcontract.api.OrderElementWithAdvanceMeasurementsDTO; +import org.navalplanner.ws.subcontract.api.OrderElementWithAdvanceMeasurementsListDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * Tests for {@link IReportAdvancesService}. + * + * @author Manuel Rego Casasnovas + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + WEBAPP_SPRING_CONFIG_FILE, WEBAPP_SPRING_CONFIG_TEST_FILE, + WEBAPP_SPRING_SECURITY_CONFIG_FILE }) +@Transactional +public class ReportAdvancesServiceTest { + + @Resource + private IDataBootstrap defaultAdvanceTypesBootstrapListener; + + @Resource + private IDataBootstrap configurationBootstrap; + + @Before + public void loadRequiredaData() { + defaultAdvanceTypesBootstrapListener.loadRequiredData(); + configurationBootstrap.loadRequiredData(); + } + + @Autowired + private IReportAdvancesService reportAdvancesService; + + @Autowired + private IOrderDAO orderDAO; + + @Autowired + private IConfigurationDAO configurationDAO; + + @Test + public void validAdvancesReport() { + Order order = givenValidOrderAlreadyStored(); + String orderElementCode = order.getChildren().get(0).getCode(); + + Date date = new Date(); + BigDecimal value = new BigDecimal(20); + OrderElementWithAdvanceMeasurementsListDTO orderElementWithAdvanceMeasurementsListDTO = givenOrderElementWithAdvanceMeasurementsListDTO( + orderElementCode, date, value); + 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(1)); + + AdvanceMeasurement advanceMeasurement = directAdvanceAssignmentSubcontractor + .getAdvanceMeasurements().first(); + assertThat(advanceMeasurement.getDate(), equalTo(LocalDate + .fromDateFields(date))); + assertThat(advanceMeasurement.getValue(), equalTo(value)); + } + + private OrderElementWithAdvanceMeasurementsListDTO givenOrderElementWithAdvanceMeasurementsListDTO( + String orderElementCode, Date date, BigDecimal value) { + OrderElementWithAdvanceMeasurementsDTO orderElementWithAdvanceMeasurementsDTO = new OrderElementWithAdvanceMeasurementsDTO(); + orderElementWithAdvanceMeasurementsDTO.code = orderElementCode; + + Set advanceMeasurementDTOs = new HashSet(); + advanceMeasurementDTOs.add(new AdvanceMeasurementDTO(date, value)); + orderElementWithAdvanceMeasurementsDTO.advanceMeasurements = advanceMeasurementDTOs; + + return new OrderElementWithAdvanceMeasurementsListDTO(Arrays + .asList(orderElementWithAdvanceMeasurementsDTO)); + } + + private Order givenValidOrderAlreadyStored() { + Order order = Order.create(); + order.setCode(UUID.randomUUID().toString()); + order.setName("Order name"); + order.setInitDate(new Date()); + order.setCalendar(configurationDAO.getConfiguration() + .getDefaultCalendar()); + + OrderLine orderLine = OrderLine + .createOrderLineWithUnfixedPercentage(1000); + orderLine.setCode(UUID.randomUUID().toString()); + orderLine.setName("Order line name"); + + order.add(orderLine); + + orderDAO.save(order); + + return order; + } + +} diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java index 06064164b..1494700b0 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java @@ -40,6 +40,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.IDataBootstrap; +import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; import org.navalplanner.business.externalcompanies.entities.ExternalCompany; import org.navalplanner.business.orders.daos.IOrderDAO; @@ -93,6 +94,9 @@ public class SubcontractServiceTest { @Autowired private SessionFactory sessionFactory; + @Autowired + private IConfigurationDAO configurationDAO; + private OrderLineDTO givenBasicOrderLineDTO(String orderLineCode) { OrderLineDTO orderLineDTO = new OrderLineDTO(); orderLineDTO.name = "Test"; @@ -204,4 +208,4 @@ public class SubcontractServiceTest { assertThat(children.get(0).getExternalCode(), equalTo(orderLineCode)); } -} \ No newline at end of file +}