From 13edee523e32c445f02674bee4be6752b262f030 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 15 Apr 2011 09:41:29 +0200 Subject: [PATCH] Adding OrderElementTreeModelTest with basic tests for addElement operation. FEA: ItEr74S04BugFixing --- .../web/orders/OrderElementTreeModelTest.java | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderElementTreeModelTest.java diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderElementTreeModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderElementTreeModelTest.java new file mode 100644 index 000000000..a0b1883bc --- /dev/null +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderElementTreeModelTest.java @@ -0,0 +1,234 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * Copyright (C) 2010-2011 Igalia, S.L. + * + * 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.orders; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertFalse; +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 static org.navalplanner.web.test.WebappGlobalNames.WEBAPP_SPRING_SECURITY_CONFIG_TEST_FILE; + +import java.math.BigDecimal; + +import javax.annotation.Resource; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.navalplanner.business.IDataBootstrap; +import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; +import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; +import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException; +import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; +import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.orders.entities.OrderLine; +import org.navalplanner.business.requirements.entities.CriterionRequirement; +import org.navalplanner.business.requirements.entities.DirectCriterionRequirement; +import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement; +import org.navalplanner.business.resources.daos.ICriterionDAO; +import org.navalplanner.business.resources.entities.Criterion; +import org.navalplanner.business.scenarios.bootstrap.PredefinedScenarios; +import org.navalplanner.business.scenarios.entities.OrderVersion; +import org.navalplanner.business.scenarios.entities.Scenario; +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 OrderElementTreeModel} + * + * @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, + WEBAPP_SPRING_SECURITY_CONFIG_TEST_FILE }) +@Transactional +public class OrderElementTreeModelTest { + + private static final BigDecimal HUNDRED = new BigDecimal(100); + + @Resource + private IDataBootstrap defaultAdvanceTypesBootstrapListener; + + @Resource + private IDataBootstrap scenariosBootstrap; + + @Resource + private IDataBootstrap criterionsBootstrap; + + @Resource + private IDataBootstrap configurationBootstrap; + + @Autowired + private ICriterionDAO criterionDAO; + + private Order order; + + private OrderElementTreeModel model; + + private Criterion criterion; + + private DirectAdvanceAssignment directAdvanceAssignment; + + @Before + public void loadRequiredaData() { + // Load data + configurationBootstrap.loadRequiredData(); + defaultAdvanceTypesBootstrapListener.loadRequiredData(); + scenariosBootstrap.loadRequiredData(); + criterionsBootstrap.loadRequiredData(); + + givenOrder(); + givenModel(); + } + + private void givenOrder() { + order = Order.create(); + order.setName("order"); + Scenario scenario = PredefinedScenarios.MASTER.getScenario(); + OrderVersion result = OrderVersion.createInitialVersion(scenario); + order.setVersionForScenario(scenario, result); + order.useSchedulingDataFor(scenario); + } + + private void givenModel() { + model = new OrderElementTreeModel(order); + } + + private void addCriterionRequirement(OrderElement orderElement) { + criterion = criterionDAO.findByNameAndType("medicalLeave", + "LEAVE").get(0); + DirectCriterionRequirement directCriterionRequirement = DirectCriterionRequirement + .create(criterion); + orderElement.addCriterionRequirement(directCriterionRequirement); + } + + private void addDirectAdvanceAssignment(OrderElement orderElement) + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + directAdvanceAssignment = DirectAdvanceAssignment.create(true, HUNDRED); + directAdvanceAssignment + .setAdvanceType(PredefinedAdvancedTypes.PERCENTAGE.getType()); + orderElement.addAdvanceAssignment(directAdvanceAssignment); + } + + @Test + public void checkAddElementWithCriteriaAndAdvancesInParent() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + addCriterionRequirement(order); + addDirectAdvanceAssignment(order); + + model.addElement("element", 100); + + OrderLine element = (OrderLine) model.getRoot().getChildren().get(0); + assertTrue(element.getDirectAdvanceAssignments().isEmpty()); + + assertThat(element.getCriterionRequirements().size(), equalTo(1)); + CriterionRequirement criterionRequirement = element.getCriterionRequirements().iterator().next(); + assertTrue(criterionRequirement instanceof IndirectCriterionRequirement); + assertThat(criterionRequirement.getCriterion().getName(), + equalTo(criterion.getName())); + } + + @Test + public void checkAddCriterionOnChild() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + model.addElement("element", 100); + OrderLine element = (OrderLine) model.getRoot().getChildren().get(0); + + addCriterionRequirement(element); + + assertTrue(order.getCriterionRequirements().isEmpty()); + + assertThat(element.getCriterionRequirements().size(), equalTo(1)); + CriterionRequirement criterionRequirement = element + .getCriterionRequirements().iterator().next(); + assertTrue(criterionRequirement instanceof DirectCriterionRequirement); + assertTrue(criterionRequirement.getCriterion().isEquivalent(criterion)); + } + + @Test + public void checkAddCriterionOnParent() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + model.addElement("element", 100); + OrderLine element = (OrderLine) model.getRoot().getChildren().get(0); + + addCriterionRequirement(order); + + assertThat(order.getCriterionRequirements().size(), equalTo(1)); + CriterionRequirement criterionRequirement = order + .getCriterionRequirements().iterator().next(); + assertTrue(criterionRequirement instanceof DirectCriterionRequirement); + assertTrue(criterionRequirement.getCriterion().isEquivalent(criterion)); + + assertThat(element.getCriterionRequirements().size(), equalTo(1)); + criterionRequirement = element.getCriterionRequirements().iterator() + .next(); + assertTrue(criterionRequirement instanceof IndirectCriterionRequirement); + assertTrue(criterionRequirement.getCriterion().isEquivalent(criterion)); + } + + @Test + public void checkAddAssignmentOnChild() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + model.addElement("element", 100); + OrderLine element = (OrderLine) model.getRoot().getChildren().get(0); + + addDirectAdvanceAssignment(element); + assertTrue(order.getDirectAdvanceAssignments().isEmpty()); + assertFalse(order.getIndirectAdvanceAssignments().isEmpty()); + assertNotNull(order + .getIndirectAdvanceAssignment(directAdvanceAssignment + .getAdvanceType())); + assertThat(element.getDirectAdvanceAssignments().size(), equalTo(1)); + } + + @Test + public void checkAddAdvanceOnParent() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + model.addElement("element", 100); + OrderLine element = (OrderLine) model.getRoot().getChildren().get(0); + + addDirectAdvanceAssignment(order); + + assertThat(order.getDirectAdvanceAssignments().size(), equalTo(1)); + assertNotNull(order + .getDirectAdvanceAssignmentByType(directAdvanceAssignment + .getAdvanceType())); + assertTrue(element.getDirectAdvanceAssignments().isEmpty()); + } + +} \ No newline at end of file