From d8fd56c765eb54e6cfb02ff4ba53fb6146881b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Fri, 15 Oct 2010 17:06:14 +0200 Subject: [PATCH] Add numberOfDaysUntil to IntraDayDate and associated tests FEA: ItEr62S05BugFixing --- .../business/workingday/IntraDayDate.java | 11 ++++++ .../test/workingday/IntraDayDateTest.java | 35 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workingday/IntraDayDate.java b/navalplanner-business/src/main/java/org/navalplanner/business/workingday/IntraDayDate.java index b615c33f6..91e0b2a32 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workingday/IntraDayDate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workingday/IntraDayDate.java @@ -33,6 +33,7 @@ import org.apache.commons.lang.Validate; import org.apache.commons.lang.builder.HashCodeBuilder; import org.hibernate.validator.NotNull; import org.joda.time.DateTime; +import org.joda.time.Days; import org.joda.time.LocalDate; /** @@ -270,6 +271,16 @@ public class IntraDayDate implements Comparable { return daysUntil(new UntilEnd(endExclusive)); } + public int numberOfDaysUntil(IntraDayDate end) { + Validate.isTrue(compareTo(end) <= 0); + Days daysBetween = Days.daysBetween(getDate(), end.getDate()); + if (getEffortDuration().compareTo(end.getEffortDuration()) <= 0) { + return daysBetween.getDays(); + } else { + return daysBetween.getDays() - 1; + } + } + public Iterable daysUntil(final UntilEnd predicate) { return new Iterable() { @Override diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/IntraDayDateTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/IntraDayDateTest.java index 962379804..9697825d9 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/IntraDayDateTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/workingday/IntraDayDateTest.java @@ -143,6 +143,41 @@ public class IntraDayDateTest { assertThat(IntraDayDate.toList(days), delimitedBy(start, middle, end)); } + @Test + public void canNowTheNumberOfDaysBetweenTwoDates() { + IntraDayDate start = IntraDayDate.create(today, zero()); + IntraDayDate end = IntraDayDate.create(today.plusDays(1), zero()); + assertThat(start.numberOfDaysUntil(end), equalTo(1)); + assertThat( + start.numberOfDaysUntil(IntraDayDate.create(today, hours(8))), + equalTo(0)); + assertThat( + IntraDayDate.create(today, hours(4)).numberOfDaysUntil( + IntraDayDate.create(tomorrow, hours(3))), equalTo(0)); + assertThat( + IntraDayDate.create(today, hours(4)).numberOfDaysUntil( + IntraDayDate.create(tomorrow, hours(4))), equalTo(1)); + assertThat( + IntraDayDate.create(today, hours(4)).numberOfDaysUntil( + IntraDayDate.create(tomorrow, hours(5))), equalTo(1)); + assertThat( + IntraDayDate.create(today, hours(4)).numberOfDaysUntil( + IntraDayDate.create(tomorrow.plusDays(1), hours(3))), + equalTo(1)); + } + + @Test(expected = IllegalArgumentException.class) + public void theEndMustBeEqualOrBiggerThanTheStart() { + IntraDayDate start = IntraDayDate.create(today, zero()); + IntraDayDate end = IntraDayDate.create(today.plusDays(1), zero()); + assertThat(end.numberOfDaysUntil(start), equalTo(1)); + } + + public void theEndCanBeTheSameAsTheStart() { + IntraDayDate start = IntraDayDate.create(today, zero()); + assertThat(start.numberOfDaysUntil(start), equalTo(0)); + } + @Test public void worksWellWithEffortDurationsNotZero() { IntraDayDate start = IntraDayDate.create(today, halfHour);