From b7531f6e2c5f421df6be6ab7a17fc5a819626d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 17 Mar 2010 19:52:20 +0100 Subject: [PATCH] ItEr51S11RFInfraestucturaEscenariosItEr50S14: Add navigation from Order to Scenario. This association is mapped as inverse so association modifications are not stored. It's just used for navigating purposes. --- .../business/orders/entities/Order.java | 11 ++ .../business/orders/entities/Orders.hbm.xml | 7 + .../bootstrap/ScenariosBootstrapTest.java | 12 +- .../test/scenarios/daos/ScenarioDAOTest.java | 142 ++++++++++++++++++ 4 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/daos/ScenarioDAOTest.java diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 6aacba626..af60ccd8c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -22,8 +22,11 @@ package org.navalplanner.business.orders.entities; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.hibernate.validator.AssertTrue; @@ -36,6 +39,8 @@ import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.planner.entities.TaskGroup; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.business.scenarios.entities.OrderVersion; +import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.templates.entities.OrderTemplate; import org.navalplanner.business.users.entities.OrderAuthorization; @@ -86,6 +91,8 @@ public class Order extends OrderLineGroup { private String customerReference; + private Map scenarios = new HashMap(); + private Set orderAuthorizations = new HashSet(); public void addOrderAuthorization(OrderAuthorization orderAuthorization) { @@ -93,6 +100,10 @@ public class Order extends OrderLineGroup { orderAuthorizations.add(orderAuthorization); } + public Map getScenarios() { + return Collections.unmodifiableMap(scenarios); + } + public BigDecimal getWorkBudget() { if (workBudget == null) { return BigDecimal.ZERO; diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml index 6854b1c40..0b44f6dbb 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml @@ -97,6 +97,13 @@ + + + + + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/bootstrap/ScenariosBootstrapTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/bootstrap/ScenariosBootstrapTest.java index 6b678973b..ad0d4ac13 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/bootstrap/ScenariosBootstrapTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/bootstrap/ScenariosBootstrapTest.java @@ -26,9 +26,7 @@ import static org.junit.Assert.assertTrue; import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; -import java.util.Date; import java.util.Set; -import java.util.UUID; import javax.annotation.Resource; @@ -46,6 +44,7 @@ import org.navalplanner.business.scenarios.bootstrap.IScenariosBootstrap; import org.navalplanner.business.scenarios.bootstrap.PredefinedScenarios; import org.navalplanner.business.scenarios.daos.IScenarioDAO; import org.navalplanner.business.scenarios.entities.Scenario; +import org.navalplanner.business.test.scenarios.daos.ScenarioDAOTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.NotTransactional; import org.springframework.test.context.ContextConfiguration; @@ -96,14 +95,7 @@ public class ScenariosBootstrapTest { } private Order givenOrderStored() { - Order order = Order.create(); - order.setInitDate(new Date()); - order.setName("name-" + UUID.randomUUID().toString()); - order.setCode("code-" + UUID.randomUUID().toString()); - order.setCalendar(configurationDAO.getConfiguration() - .getDefaultCalendar()); - orderDAO.save(order); - return order; + return ScenarioDAOTest.createOrderStored(orderDAO, configurationDAO); } @Test diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/daos/ScenarioDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/daos/ScenarioDAOTest.java new file mode 100644 index 000000000..b29499b63 --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/scenarios/daos/ScenarioDAOTest.java @@ -0,0 +1,142 @@ +/* + * 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.daos; + +import static org.junit.Assert.assertTrue; +import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +import java.util.Date; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +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.common.IAdHocTransactionService; +import org.navalplanner.business.common.IOnTransaction; +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.scenarios.daos.IScenarioDAO; +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.annotation.NotTransactional; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Óscar González Fernández + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class ScenarioDAOTest { + + @Autowired + private IScenarioDAO scenarioDAO; + + @Autowired + private IOrderDAO orderDAO; + + @Autowired + private IConfigurationDAO configurationDAO; + + @Autowired + private IAdHocTransactionService transactionService; + + @Resource + private IDataBootstrap defaultAdvanceTypesBootstrapListener; + + @Resource + private IDataBootstrap configurationBootstrap; + + public static Order createOrderStored(IOrderDAO orderDAO, + IConfigurationDAO configurationDAO) { + Order order = Order.create(); + order.setInitDate(new Date()); + order.setName("name-" + UUID.randomUUID().toString()); + order.setCode("code-" + UUID.randomUUID().toString()); + order.setCalendar(configurationDAO.getConfiguration() + .getDefaultCalendar()); + orderDAO.save(order); + return order; + } + + private Order givenOrderStored() { + return ScenarioDAOTest.createOrderStored(orderDAO, configurationDAO); + } + + private Scenario createNewScenario() { + return Scenario.create(UUID.randomUUID().toString()); + } + + @Before + public void loadRequiredaData() { + configurationBootstrap.loadRequiredData(); + defaultAdvanceTypesBootstrapListener.loadRequiredData(); + } + + @Test + @NotTransactional + public void afterSavingScenarioWithOrderNewlyRetrievedOrderHasScenariosInfo() { + final Scenario scenario = createNewScenario(); + final Long orderId = transactionService + .runOnTransaction(new IOnTransaction() { + + @Override + public Long execute() { + Order order = givenOrderStored(); + scenario.addOrder(order); + scenarioDAO.save(scenario); + return order.getId(); + } + }); + + transactionService.runOnTransaction(new IOnTransaction() { + + @Override + public Void execute() { + Order order = orderDAO.findExistingEntity(orderId); + Map scenarios = order.getScenarios(); + assertTrue(isAt(scenario, scenarios.keySet())); + return null; + } + + private boolean isAt(Scenario scenario, Set scenarios) { + for (Scenario each : scenarios) { + if (scenario.getId().equals(each.getId())) { + return true; + } + } + return false; + } + }); + } + +}