Add numberOfDaysUntil to IntraDayDate and associated tests

FEA: ItEr62S05BugFixing
This commit is contained in:
Óscar González Fernández 2010-10-15 17:06:14 +02:00
parent a6712ebcf7
commit d8fd56c765
2 changed files with 46 additions and 0 deletions

View file

@ -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<IntraDayDate> {
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<PartialDay> daysUntil(final UntilEnd predicate) {
return new Iterable<IntraDayDate.PartialDay>() {
@Override

View file

@ -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);