package net.sourceforge.ganttproject.test.task; import biz.ganttproject.core.calendar.AlwaysWorkingTimeCalendarImpl; import biz.ganttproject.core.calendar.GPCalendarCalc; import biz.ganttproject.core.time.TimeUnitStack; import biz.ganttproject.core.time.impl.GPTimeUnitStack; import junit.framework.TestCase; import net.sourceforge.ganttproject.gui.NotificationManager; import net.sourceforge.ganttproject.resource.HumanResource; import net.sourceforge.ganttproject.resource.HumanResourceManager; import net.sourceforge.ganttproject.roles.RoleManager; import net.sourceforge.ganttproject.task.ResourceAssignment; import net.sourceforge.ganttproject.task.Task; import net.sourceforge.ganttproject.task.TaskManager; import net.sourceforge.ganttproject.task.TaskManagerConfig; import java.awt.*; import java.net.URL; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class TestResourceAssignments extends TestCase { private TaskManager myTaskManager; private HumanResourceManager myHumanResourceManager; public TestResourceAssignments(String s) { super(s); } public void testResourceAppearsInListAfterCreation() { TaskManager taskManager = getTaskManager(); Task task = taskManager.createTask(); HumanResource res1 = getResourceManager().getById(1); HumanResource res2 = getResourceManager().getById(2); task.getAssignmentCollection().addAssignment(res1); task.getAssignmentCollection().addAssignment(res2); Set<HumanResource> actualResources = extractResources(task); Set<HumanResource> expectedResources = new HashSet<HumanResource>( Arrays.asList(new HumanResource[] { res1, res2 })); assertEquals("Unexpected set of resources assigned to task=" + task, expectedResources, actualResources); } public void testResourceDisappearsFromListAfterAssignmentDeletion() { TaskManager taskManager = getTaskManager(); Task task = taskManager.createTask(); HumanResource res1 = getResourceManager().getById(1); HumanResource res2 = getResourceManager().getById(2); task.getAssignmentCollection().addAssignment(res1); ResourceAssignment asgn2 = task.getAssignmentCollection() .addAssignment(res2); asgn2.delete(); Set<HumanResource> actualResources = extractResources(task); Set<HumanResource> expectedResources = new HashSet<HumanResource>( Arrays.asList(res1)); assertEquals("Unexpected set of resources assigned to task=" + task, expectedResources, actualResources); } public void testResourceIsNotAssignedTwice() { TaskManager taskManager = getTaskManager(); Task task = taskManager.createTask(); HumanResource res1 = getResourceManager().getById(1); task.getAssignmentCollection().addAssignment(res1); task.getAssignmentCollection().addAssignment(res1); Set<HumanResource> actualResources = extractResources(task); Set<HumanResource> expectedResources = new HashSet<HumanResource>( Arrays.asList(res1)); assertEquals("Unexpected set of resources assigned to task=" + task, expectedResources, actualResources); } public void testAssignmentsDisappearOnTaskDeletion() { TaskManager taskManager = getTaskManager(); Task task = taskManager.createTask(); HumanResource res1 = getResourceManager().getById(1); task.getAssignmentCollection().addAssignment(res1); task.delete(); ResourceAssignment[] assignments = res1.getAssignments(); assertTrue( "Resource is expected to have no assignments after task deletion", assignments.length == 0); } public void testAssignmentDisappearOnResourceDeletion() { TaskManager taskManager = getTaskManager(); Task task = taskManager.createTask(); HumanResource res1 = getResourceManager().getById(1); task.getAssignmentCollection().addAssignment(res1); res1.delete(); Set<HumanResource> resources = extractResources(task); assertTrue("It is expected that after resource deletion assignments disappear", resources.isEmpty()); } private Set<HumanResource> extractResources(Task task) { Set<HumanResource> result = new HashSet<HumanResource>(); ResourceAssignment[] assignments = task.getAssignments(); for (int i = 0; i < assignments.length; i++) { ResourceAssignment next = assignments[i]; result.add(next.getResource()); assertEquals("Unexpected task is owning resource assignment=" + next, task, next.getTask()); } return result; } @Override protected void setUp() throws Exception { super.setUp(); myHumanResourceManager = new HumanResourceManager(RoleManager.Access .getInstance().getDefaultRole(), null); getResourceManager().create("test resource#1", 1); getResourceManager().create("test resource#2", 2); myTaskManager = newTaskManager(); } private TaskManager newTaskManager() { return TaskManager.Access.newInstance(null, new TaskManagerConfig() { @Override public Color getDefaultColor() { return null; } @Override public GPCalendarCalc getCalendar() { return new AlwaysWorkingTimeCalendarImpl(); } @Override public TimeUnitStack getTimeUnitStack() { return new GPTimeUnitStack(); } @Override public HumanResourceManager getResourceManager() { return null; } @Override public URL getProjectDocumentURL() { return null; } @Override public NotificationManager getNotificationManager() { return null; } }); } private TaskManager getTaskManager() { return myTaskManager; } private HumanResourceManager getResourceManager() { return myHumanResourceManager; } }