package org.synyx.urlaubsverwaltung.restapi.availability; import org.joda.time.DateMidnight; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.synyx.urlaubsverwaltung.core.person.Person; import org.synyx.urlaubsverwaltung.test.TestDataCreator; import java.math.BigDecimal; import java.util.List; /** * @author Timo Eifler - eifler@synyx.de */ public class AvailabilityServiceTest { private static final int DAYS_IN_TEST_DATE_RANGE = 8; private AvailabilityService availabilityService; private FreeTimeAbsenceProvider freeTimeAbsenceProvider; private Person testPerson; private DateMidnight testDateRangeStart; private DateMidnight testDateRangeEnd; private TimedAbsenceSpans timedAbsenceSpansMock; @Before public void setUp() { freeTimeAbsenceProvider = Mockito.mock(FreeTimeAbsenceProvider.class); timedAbsenceSpansMock = Mockito.mock(TimedAbsenceSpans.class); Mockito.when(freeTimeAbsenceProvider.checkForAbsence( Mockito.any(Person.class), Mockito.any(DateMidnight.class))) .thenReturn(timedAbsenceSpansMock); availabilityService = new AvailabilityService(freeTimeAbsenceProvider); testPerson = TestDataCreator.createPerson(); testDateRangeStart = new DateMidnight(2016, 1, 1); testDateRangeEnd = new DateMidnight(2016, 1, DAYS_IN_TEST_DATE_RANGE); } @Test public void ensureFetchesAvailabilityListForEachDayInDateRange() { availabilityService.getPersonsAvailabilities(testDateRangeStart, testDateRangeEnd, testPerson); Mockito.verify(freeTimeAbsenceProvider, Mockito.times(DAYS_IN_TEST_DATE_RANGE)) .checkForAbsence(Mockito.eq(testPerson), Mockito.any(DateMidnight.class)); } @Test public void ensureReturnsDayAvailabilityWithCalculatedPresenceRatio() { DateMidnight dayToTest = testDateRangeStart; BigDecimal expectedAvailabilityRatio = BigDecimal.ONE; Mockito.when(timedAbsenceSpansMock.calculatePresenceRatio()).thenReturn(expectedAvailabilityRatio); AvailabilityList personsAvailabilities = availabilityService.getPersonsAvailabilities(dayToTest, dayToTest, testPerson); Mockito.verify(timedAbsenceSpansMock, Mockito.times(1)).calculatePresenceRatio(); List<DayAvailability> availabilityList = personsAvailabilities.getAvailabilities(); Assert.assertEquals("Wrong number of Availabilities returned", 1, availabilityList.size()); DayAvailability availabilityOnDayToTest = availabilityList.get(0); Assert.assertEquals("Wrong TimedAbsenceSpans set on return object", timedAbsenceSpansMock, availabilityOnDayToTest.getTimedAbsenceSpans()); Assert.assertEquals("Wrong availability ratio set on return object", expectedAvailabilityRatio, availabilityOnDayToTest.getAvailabilityRatio()); } }