diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/scenarios/entities/Scenario.java b/navalplanner-business/src/main/java/org/navalplanner/business/scenarios/entities/Scenario.java index d096d4f84..eeef0cdc7 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/scenarios/entities/Scenario.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/scenarios/entities/Scenario.java @@ -78,8 +78,12 @@ public class Scenario extends BaseEntity { } public void addOrder(Order order) { - if (!orders.values().contains(order)) { - orders.put(order, OrderVersion.createInitialVersion()); + addOrder(order, OrderVersion.createInitialVersion()); + } + + public void addOrder(Order order, OrderVersion orderVersion) { + if (!orders.keySet().contains(order)) { + orders.put(order, orderVersion); } } @@ -134,7 +138,11 @@ public class Scenario extends BaseEntity { } public Scenario newDerivedScenario() { - return new Scenario(_("Derived from {0}", name), this); + Scenario result = new Scenario(_("Derived from {0}", name), this); + for (Order order : orders.keySet()) { + result.addOrder(order, orders.get(order)); + } + return result; } public boolean isPredefined() { diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/entities/ScenarioTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/entities/ScenarioTest.java new file mode 100644 index 000000000..b056d8952 --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/entities/ScenarioTest.java @@ -0,0 +1,78 @@ +/* + * This file is part of NavalPlan + * + * 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.business.test.scenarios.entities; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +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.orders.entities.Order; +import org.navalplanner.business.scenarios.entities.Scenario; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * Tests for {@link Scenario} entity. + * + * @author Manuel Rego Casasnovas + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class ScenarioTest { + + @Resource + private IDataBootstrap defaultAdvanceTypesBootstrapListener; + + @Before + public void loadRequiredaData() { + defaultAdvanceTypesBootstrapListener.loadRequiredData(); + } + + @Test + public void checkNewDerivedScenario() { + String predecessorScenarioName = "parent"; + Scenario predecessor = Scenario.create(predecessorScenarioName); + + Order order = Order.create(); + String orderName = "order1"; + order.setName(orderName); + predecessor.addOrder(order); + + Scenario child = predecessor.newDerivedScenario(); + assertThat(child.getPredecessor().getName(), equalTo(predecessor + .getName())); + + assertThat(child.getOrders().size(), equalTo(1)); + assertThat(child.getOrders().keySet().iterator().next().getName(), + equalTo(orderName)); + } + +}