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));
+ }
+
+}