package org.synyx.urlaubsverwaltung.restapi.holiday; import org.joda.time.DateMidnight; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.synyx.urlaubsverwaltung.core.person.Person; import org.synyx.urlaubsverwaltung.core.person.PersonService; import org.synyx.urlaubsverwaltung.core.settings.FederalState; import org.synyx.urlaubsverwaltung.core.settings.Settings; import org.synyx.urlaubsverwaltung.core.settings.SettingsService; import org.synyx.urlaubsverwaltung.core.workingtime.PublicHolidaysService; import org.synyx.urlaubsverwaltung.core.workingtime.WorkingTimeService; import org.synyx.urlaubsverwaltung.restapi.ApiExceptionHandlerControllerAdvice; import org.synyx.urlaubsverwaltung.restapi.holiday.PublicHolidayController; import org.synyx.urlaubsverwaltung.test.TestDataCreator; import java.util.Optional; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @author Aljona Murygina - murygina@synyx.de */ public class PublicHolidayControllerTest { private MockMvc mockMvc; private PublicHolidaysService publicHolidayServiceMock; private PersonService personServiceMock; private WorkingTimeService workingTimeServiceMock; private SettingsService settingsServiceMock; @Before public void setUp() { personServiceMock = Mockito.mock(PersonService.class); publicHolidayServiceMock = Mockito.mock(PublicHolidaysService.class); workingTimeServiceMock = Mockito.mock(WorkingTimeService.class); settingsServiceMock = Mockito.mock(SettingsService.class); mockMvc = MockMvcBuilders.standaloneSetup(new PublicHolidayController(publicHolidayServiceMock, personServiceMock, workingTimeServiceMock, settingsServiceMock)) .setControllerAdvice(new ApiExceptionHandlerControllerAdvice()) .build(); Settings settings = new Settings(); settings.getWorkingTimeSettings().setFederalState(FederalState.BADEN_WUERTTEMBERG); Mockito.when(settingsServiceMock.getSettings()).thenReturn(settings); } @Test public void ensureReturnsCorrectPublicHolidaysForYear() throws Exception { mockMvc.perform(get("/api/holidays").param("year", "2016")).andExpect(status().isOk()); Mockito.verify(publicHolidayServiceMock).getHolidays(2016, FederalState.BADEN_WUERTTEMBERG); } @Test public void ensureReturnsCorrectPublicHolidaysForYearAndMonth() throws Exception { mockMvc.perform(get("/api/holidays").param("year", "2016").param("month", "4")).andExpect(status().isOk()); Mockito.verify(publicHolidayServiceMock).getHolidays(2016, 4, FederalState.BADEN_WUERTTEMBERG); } @Test public void ensureReturnsCorrectPublicHolidaysForYearAndPersonWithOverriddenFederalState() throws Exception { Person person = TestDataCreator.createPerson(); Mockito.when(personServiceMock.getPersonByID(Mockito.anyInt())).thenReturn(Optional.of(person)); Mockito.when(workingTimeServiceMock.getFederalStateForPerson(Mockito.any(Person.class), Mockito.any(DateMidnight.class))) .thenReturn(FederalState.BAYERN); mockMvc.perform(get("/api/holidays").param("year", "2016").param("person", "23")).andExpect(status().isOk()); Mockito.verify(publicHolidayServiceMock).getHolidays(2016, FederalState.BAYERN); Mockito.verify(workingTimeServiceMock).getFederalStateForPerson(person, new DateMidnight(2016, 1, 1)); } @Test public void ensureReturnsCorrectPublicHolidaysForYearAndMonthAndPersonWithOverriddenFederalState() throws Exception { Person person = TestDataCreator.createPerson(); Mockito.when(personServiceMock.getPersonByID(Mockito.anyInt())).thenReturn(Optional.of(person)); Mockito.when(workingTimeServiceMock.getFederalStateForPerson(Mockito.any(Person.class), Mockito.any(DateMidnight.class))) .thenReturn(FederalState.BAYERN); mockMvc.perform(get("/api/holidays").param("year", "2016").param("month", "4").param("person", "23")) .andExpect(status().isOk()); Mockito.verify(publicHolidayServiceMock).getHolidays(2016, 4, FederalState.BAYERN); Mockito.verify(workingTimeServiceMock).getFederalStateForPerson(person, new DateMidnight(2016, 4, 1)); } @Test public void ensureBadRequestForMissingYearParameter() throws Exception { mockMvc.perform(get("/api/holidays")).andExpect(status().isBadRequest()); } @Test public void ensureBadRequestForInvalidYearParameter() throws Exception { mockMvc.perform(get("/api/holidays").param("year", "foo")).andExpect(status().isBadRequest()); } @Test public void ensureBadRequestForInvalidMonthParameter() throws Exception { mockMvc.perform(get("/api/holidays").param("year", "2016").param("month", "foo")) .andExpect(status().isBadRequest()); } @Test public void ensureBadRequestForInvalidPersonParameter() throws Exception { mockMvc.perform(get("/api/holidays").param("year", "2016").param("person", "foo")) .andExpect(status().isBadRequest()); } @Test public void ensureBadRequestIfThereIsNoPersonForGivenID() throws Exception { Mockito.when(personServiceMock.getPersonByID(Mockito.anyInt())).thenReturn(Optional.empty()); mockMvc.perform(get("/api/holidays").param("year", "2016").param("person", "23")) .andExpect(status().isBadRequest()); } }