/* Copyright 2014 BarD Software s.r.o This file is part of GanttProject, an opensource project management tool. GanttProject is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GanttProject 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 General Public License for more details. You should have received a copy of the GNU General Public License along with GanttProject. If not, see <http://www.gnu.org/licenses/>. */ package net.sourceforge.ganttproject.task.algorithm; import java.math.BigDecimal; import net.sourceforge.ganttproject.TestSetupHelper; import net.sourceforge.ganttproject.TestSetupHelper.TaskManagerBuilder; import net.sourceforge.ganttproject.resource.HumanResource; import net.sourceforge.ganttproject.task.Task; import net.sourceforge.ganttproject.task.TaskContainmentHierarchyFacade; import net.sourceforge.ganttproject.test.task.TaskTestCase; /** * Tests for cost calculations * * @author dbarashev (Dmitry Barashev) */ public class CostAlgorithmTest extends TaskTestCase { public void testSupertaskCost() { Task supertask = createTask(); Task subtask1 = createTask(); Task subtask2 = createTask(); TaskContainmentHierarchyFacade hierarchy = getTaskManager().getTaskHierarchy(); hierarchy.move(subtask1, supertask); hierarchy.move(subtask2, supertask); supertask.getCost().setCalculated(true); subtask1.getCost().setCalculated(false); subtask1.getCost().setValue(BigDecimal.valueOf(5)); subtask2.getCost().setCalculated(false); subtask2.getCost().setValue(BigDecimal.valueOf(15)); assertEquals(BigDecimal.valueOf(20), supertask.getCost().getValue()); supertask.getCost().setCalculated(false); supertask.getCost().setValue(BigDecimal.valueOf(10)); assertEquals(BigDecimal.valueOf(10), supertask.getCost().getValue()); } public void testResourceCost() { TaskManagerBuilder builder = TestSetupHelper.newTaskManagerBuilder(); setTaskManager(builder.build()); HumanResource joe = new HumanResource("Joe", 1, builder.getResourceManager()); joe.setStandardPayRate(BigDecimal.valueOf(5)); HumanResource jane = new HumanResource("Jane", 1, builder.getResourceManager()); jane.setStandardPayRate(BigDecimal.valueOf(10)); builder.getResourceManager().add(joe); builder.getResourceManager().add(jane); Task t = createTask(); t.setDuration(t.getManager().createLength(2)); t.getAssignmentCollection().addAssignment(joe).setLoad(100f); t.getAssignmentCollection().addAssignment(jane).setLoad(50f); t.getCost().setCalculated(true); assertEquals(BigDecimal.valueOf(20f), t.getCost().getValue()); t.getCost().setCalculated(false); t.getCost().setValue(BigDecimal.valueOf(10)); assertEquals(BigDecimal.valueOf(10), t.getCost().getValue()); } public void testResourceTotalCost() { TaskManagerBuilder builder = TestSetupHelper.newTaskManagerBuilder(); setTaskManager(builder.build()); HumanResource joe = new HumanResource("Joe", 1, builder.getResourceManager()); joe.setStandardPayRate(BigDecimal.valueOf(5)); assertEquals(BigDecimal.ZERO, joe.getTotalCost()); builder.getResourceManager().add(joe); Task t = createTask(); t.setDuration(t.getManager().createLength(2)); t.getAssignmentCollection().addAssignment(joe).setLoad(100f); assertEquals(BigDecimal.valueOf(10), joe.getTotalCost()); t = createTask(); t.setDuration(t.getManager().createLength(4)); t.getAssignmentCollection().addAssignment(joe).setLoad(50f); assertEquals(BigDecimal.valueOf(20), joe.getTotalCost()); t = createTask(); t.setDuration(t.getManager().createLength(10)); t.getAssignmentCollection().addAssignment(joe).setLoad(0f); assertEquals(BigDecimal.valueOf(20), joe.getTotalCost()); } }