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 new file mode 100644 index 000000000..17867faa4 --- /dev/null +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/test/ws/subcontract/SubcontractServiceTest.java @@ -0,0 +1,190 @@ +/* + * 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.assertNull; +import static org.junit.Assert.assertThat; +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.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import org.hibernate.SessionFactory; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.navalplanner.business.IDataBootstrap; +import org.navalplanner.business.externalcompanies.daos.IExternalCompanyDAO; +import org.navalplanner.business.externalcompanies.entities.ExternalCompany; +import org.navalplanner.business.orders.daos.IOrderDAO; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.ws.common.api.InstanceConstraintViolationsDTO; +import org.navalplanner.ws.common.api.OrderElementDTO; +import org.navalplanner.ws.common.api.OrderLineDTO; +import org.navalplanner.ws.subcontract.api.ISubcontractService; +import org.navalplanner.ws.subcontract.api.SubcontractedTaskDataDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * Tests for {@link ISubcontractService}. + * + * @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 SubcontractServiceTest { + + @Resource + private IDataBootstrap defaultAdvanceTypesBootstrapListener; + + @Resource + private IDataBootstrap configurationBootstrap; + + @Before + public void loadRequiredaData() { + defaultAdvanceTypesBootstrapListener.loadRequiredData(); + configurationBootstrap.loadRequiredData(); + } + + @Autowired + private ISubcontractService subcontractService; + + @Autowired + private IOrderDAO orderDAO; + + @Autowired + private IExternalCompanyDAO externalCompanyDAO; + + @Autowired + private SessionFactory sessionFactory; + + private OrderLineDTO givenBasicOrderLineDTO(String orderLineCode) { + OrderLineDTO orderLineDTO = new OrderLineDTO(); + orderLineDTO.name = "Test"; + orderLineDTO.code = orderLineCode; + orderLineDTO.initDate = new Date(); + + return orderLineDTO; + } + + private ExternalCompany getClientExternalCompanySaved(String name, + String nif) { + ExternalCompany externalCompany = ExternalCompany.create(name, nif); + externalCompany.setClient(true); + + externalCompanyDAO.save(externalCompany); + externalCompanyDAO.flush(); + sessionFactory.getCurrentSession().evict(externalCompany); + + externalCompany.dontPoseAsTransientObjectAnymore(); + + return externalCompany; + } + + @Test + @Rollback(false) + public void testNotRollback() { + // Just to do not make rollback in order to have the default + // configuration, needed for prepareForCreate in order to autogenerate + // the order code + } + + @Test + public void invalidSubcontractedTaskDataWithoutExternalCompanyNif() { + int previous = orderDAO.getOrders().size(); + + String orderLineCode = "order-line-code"; + + OrderElementDTO orderElementDTO = givenBasicOrderLineDTO(orderLineCode); + + SubcontractedTaskDataDTO subcontractedTaskDataDTO = new SubcontractedTaskDataDTO(); + subcontractedTaskDataDTO.orderElementDTO = orderElementDTO; + + List instanceConstraintViolationsList = subcontractService + .subcontract(subcontractedTaskDataDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(1)); + + assertThat(orderDAO.getOrders().size(), equalTo(previous)); + } + + @Test + public void invalidSubcontractedTaskDataWithoutOrderElement() { + int previous = orderDAO.getOrders().size(); + + ExternalCompany externalCompany = getClientExternalCompanySaved( + "Company", "company-nif"); + + SubcontractedTaskDataDTO subcontractedTaskDataDTO = new SubcontractedTaskDataDTO(); + subcontractedTaskDataDTO.externalCompanyNif = externalCompany.getNif(); + + List instanceConstraintViolationsList = subcontractService + .subcontract(subcontractedTaskDataDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(1)); + + assertThat(orderDAO.getOrders().size(), equalTo(previous)); + } + + @Test + public void validSubcontractedTaskData() { + int previous = orderDAO.getOrders().size(); + + String orderLineCode = "order-line-code"; + + OrderElementDTO orderElementDTO = givenBasicOrderLineDTO(orderLineCode); + ExternalCompany externalCompany = getClientExternalCompanySaved( + "Company", "company-nif"); + + SubcontractedTaskDataDTO subcontractedTaskDataDTO = new SubcontractedTaskDataDTO(); + subcontractedTaskDataDTO.orderElementDTO = orderElementDTO; + subcontractedTaskDataDTO.externalCompanyNif = externalCompany.getNif(); + + List instanceConstraintViolationsList = subcontractService + .subcontract(subcontractedTaskDataDTO).instanceConstraintViolationsList; + assertThat(instanceConstraintViolationsList.size(), equalTo(0)); + + assertThat(orderDAO.getOrders().size(), equalTo(previous + 1)); + + Order order = orderDAO.getOrders().get(previous); + assertNotNull(order.getCode()); + assertNull(order.getExternalCode()); + assertThat(order.getWorkHours(), equalTo(0)); + + List children = order.getChildren(); + assertThat(children.size(), equalTo(1)); + assertThat(children.get(0).getExternalCode(), equalTo(orderLineCode)); + } + +} \ No newline at end of file