diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Dependency.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Dependency.java index 078a95e5b..d98a83e2b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Dependency.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/Dependency.java @@ -1,5 +1,7 @@ package org.navalplanner.business.planner.entities; +import org.apache.commons.lang.Validate; + /** * @author Óscar González Fernández */ @@ -29,9 +31,14 @@ public class Dependency { public Dependency() { } - private Dependency(TaskElement origin, TaskElement end, Type type) { + private Dependency(TaskElement origin, TaskElement destination, Type type) { + Validate.notNull(origin); + Validate.notNull(destination); + Validate.notNull(type); + Validate.isTrue(!origin.equals(destination), + "a dependency must have a different origin than destination"); this.origin = origin; - this.destination = end; + this.destination = destination; this.type = type; } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/DependencyTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/DependencyTest.java index 8670640d8..4644defdb 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/DependencyTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/DependencyTest.java @@ -4,6 +4,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import org.junit.Test; import org.navalplanner.business.planner.entities.Dependency; @@ -41,6 +42,30 @@ public class DependencyTest { assertThat(dependency.getType(), equalTo(type)); } + @Test + public void mustNotAllowANullValuesForAnyOfTheCreationArguments() { + Object[] arguments = { origin, destination, type }; + for (int i = 0; i < arguments.length; i++) { + Object[] cloned = arguments.clone(); + cloned[i] = null; + TaskElement origin = (TaskElement) cloned[0]; + TaskElement destination = (TaskElement) cloned[1]; + Type type = (Type) cloned[2]; + try { + Dependency.createDependency(origin, destination, type); + fail("must send IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // ok + } + } + + } + + @Test(expected = IllegalArgumentException.class) + public void dependencyMustNotAllowTheSameOriginAndDestination() { + Dependency.createDependency(origin, origin, type); + } + @Test public void creatingDependencyImpliesAssociatingItWithTheRelatedTasks() { assertFalse(origin.getDependenciesWithThisDestination().contains(