diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java index 748e8c630..772d6eee5 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java @@ -177,23 +177,26 @@ public class SpecificResourceAllocationTest { replay(this.worker); } - private void givenTask(LocalDate start, LocalDate end) { + private void givenTask(IntraDayDate start, IntraDayDate end) { task = createNiceMock(Task.class); expect(task.getCalendar()).andReturn(baseCalendar).anyTimes(); expect(task.getStartDate()).andReturn( start.toDateTimeAtStartOfDay().toDate()).anyTimes(); - expect(task.getIntraDayStartDate()).andReturn( - IntraDayDate.startOfDay(start)).anyTimes(); + expect(task.getIntraDayStartDate()).andReturn(start).anyTimes(); expect(task.getEndDate()).andReturn( end.toDateTimeAtStartOfDay().toDate()).anyTimes(); - expect(task.getIntraDayEndDate()).andReturn( - IntraDayDate.startOfDay(end)).anyTimes(); - expect(task.getFirstDayNotConsolidated()).andReturn( - IntraDayDate.startOfDay(start)).anyTimes(); + expect(task.getIntraDayEndDate()).andReturn(end).anyTimes(); + expect(task.getFirstDayNotConsolidated()).andReturn(start).anyTimes(); replay(task); } private void givenSpecificResourceAllocation(LocalDate start, LocalDate end) { + givenSpecificResourceAllocation(IntraDayDate.startOfDay(start), + IntraDayDate.startOfDay(end)); + } + + private void givenSpecificResourceAllocation(IntraDayDate start, + IntraDayDate end) { givenWorker(); givenTask(start, end); specificResourceAllocation = SpecificResourceAllocation.create(task); @@ -375,7 +378,35 @@ public class SpecificResourceAllocationTest { .getAmount().compareTo(original.getAmount()) > 0); } + @Test @SuppressWarnings("serial") + public void theResourcesPerDayAreTheOnesSpecifiedEvenIfInTheLastDayNoAllocationCanBeDone() { + final LocalDate start = new LocalDate(2000, 2, 4); + givenResourceCalendar(8, new HashMap() { + { + put(start.plusDays(3), 0); + } + }); + givenSpecificResourceAllocation(start, 4); + specificResourceAllocation.until(start.plusDays(4)).allocate( + ResourcesPerDay.amount(1)); + assertThat(specificResourceAllocation.getResourcesPerDay(), + equalTo(ResourcesPerDay.amount(1))); + } + + @Test + public void theResourcesPerDayAreTheOnesSpecifiedEvenIfTheStartIsInTheMiddleOfTheDay() { + final IntraDayDate start = IntraDayDate.create( + new LocalDate(2000, 2, 4), hours(4)); + givenResourceCalendarAlwaysReturning(8); + IntraDayDate end = IntraDayDate.startOfDay(start.getDate().plusDays(4)); + givenSpecificResourceAllocation(start, end); + specificResourceAllocation.until(end.asExclusiveEnd()).allocate( + ResourcesPerDay.amount(1)); + assertThat(specificResourceAllocation.getResourcesPerDay(), + equalTo(ResourcesPerDay.amount(1))); + } + @Test public void theHoursAreDistributedTakingIntoAccountTheWorkableHours() { final LocalDate start = new LocalDate(2000, 2, 4);