diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java b/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java index 359b929b6..ad9d252e6 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workingday/EffortDuration.java @@ -168,4 +168,20 @@ public class EffortDuration implements Comparable { return seconds == 0; } + /** + * Substracts two {@link EffortDuration}. Because {@link EffortDuration + * durations} cannot be negative this must be bigger than the + * parameter or the same + * + * @param duration + * @return the result of substracting the two durations + * @throws IllegalArgumentException + * if the parameter is bigger than this + */ + public EffortDuration minus(EffortDuration duration) { + Validate.isTrue(this.compareTo(duration) >= 0, + "minued must not be smaller than subtrahend"); + return new EffortDuration(seconds - duration.seconds); + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/EffortDurationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/EffortDurationTest.java index 6585961bf..1bc0aaff3 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/EffortDurationTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/EffortDurationTest.java @@ -149,4 +149,16 @@ public class EffortDurationTest { assertThat(hours(3).divideBy(4), equalTo(minutes(45))); } + @Test(expected = IllegalArgumentException.class) + public void effortDurationCannotBeSubstractedIfMinuedIsSmallerThanSubtrahend() { + EffortDuration threeHours = hours(3); + threeHours.minus(threeHours.and(1, Granularity.SECONDS)); + } + + @Test + public void effortDurationCanBeSubstracted() { + assertThat(hours(2).minus(minutes(120)), equalTo(EffortDuration.zero())); + assertThat(hours(2).minus(minutes(60)), equalTo(hours(1))); + } + }