diff --git a/src/main/java/org/ieeervce/api/siterearnouveau/controller/EventsController.java b/src/main/java/org/ieeervce/api/siterearnouveau/controller/EventsController.java index 7fc2969..35ee5d6 100644 --- a/src/main/java/org/ieeervce/api/siterearnouveau/controller/EventsController.java +++ b/src/main/java/org/ieeervce/api/siterearnouveau/controller/EventsController.java @@ -1,10 +1,10 @@ package org.ieeervce.api.siterearnouveau.controller; -import java.util.List; - import org.ieeervce.api.siterearnouveau.dto.ResultsDTO; import org.ieeervce.api.siterearnouveau.entity.Event; import org.ieeervce.api.siterearnouveau.service.EventsService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -12,15 +12,15 @@ @RestController @RequestMapping("/api/event") public class EventsController { - private EventsService eventsService; + private final EventsService eventsService; public EventsController(EventsService eventsService) { this.eventsService = eventsService; } @GetMapping - public ResultsDTO> list() { - List events = eventsService.list(); + public ResultsDTO> list(Pageable pageable) { + Page events = eventsService.list(pageable); return new ResultsDTO<>(events); } } diff --git a/src/main/java/org/ieeervce/api/siterearnouveau/service/EventsService.java b/src/main/java/org/ieeervce/api/siterearnouveau/service/EventsService.java index d472e8a..f69e8fe 100644 --- a/src/main/java/org/ieeervce/api/siterearnouveau/service/EventsService.java +++ b/src/main/java/org/ieeervce/api/siterearnouveau/service/EventsService.java @@ -1,20 +1,23 @@ package org.ieeervce.api.siterearnouveau.service; -import java.util.List; - import org.ieeervce.api.siterearnouveau.entity.Event; import org.ieeervce.api.siterearnouveau.repository.EventsRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @Service public class EventsService { - private EventsRepository eventsRepository; + private final EventsRepository eventsRepository; public EventsService(EventsRepository eventsRepository) { this.eventsRepository = eventsRepository; } - public List list() { - return eventsRepository.findAll(); + public Page list(Pageable pageable) { + pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("eventStartTime").ascending()); + return eventsRepository.findAll(pageable); } } diff --git a/src/test/java/org/ieeervce/api/siterearnouveau/controller/EventsControllerTest.java b/src/test/java/org/ieeervce/api/siterearnouveau/controller/EventsControllerTest.java index 472f74e..b687d21 100644 --- a/src/test/java/org/ieeervce/api/siterearnouveau/controller/EventsControllerTest.java +++ b/src/test/java/org/ieeervce/api/siterearnouveau/controller/EventsControllerTest.java @@ -1,14 +1,8 @@ package org.ieeervce.api.siterearnouveau.controller; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.iterableWithSize; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.util.Collections; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.ieeervce.api.siterearnouveau.entity.Event; import org.ieeervce.api.siterearnouveau.service.EventsService; import org.junit.jupiter.api.BeforeEach; @@ -18,21 +12,30 @@ import org.mockito.Mock; import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.Collections; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.iterableWithSize; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(MockitoExtension.class) class EventsControllerTest { private static final String KEYWORDS = "a b c d"; - private static final int EVENT_ID = 1; + private static final int EVENT_ID = 1; private static final String HOST_NAME = "abcd efgh"; - private static final String EXAMPLE_HOSTS_TREE_STRING = String.format("{\"name\":\"%s\"}",HOST_NAME); + private static final String EXAMPLE_HOSTS_TREE_STRING = String.format("{\"name\":\"%s\"}", HOST_NAME); @Mock EventsService eventsService; @@ -46,9 +49,12 @@ class EventsControllerTest { MockMvc mvc; + @BeforeEach - void setup() throws JsonMappingException, JsonProcessingException { - mvc = MockMvcBuilders.standaloneSetup(eventsController).build(); + void setup() throws JsonProcessingException { + mvc = MockMvcBuilders.standaloneSetup(eventsController) + .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()) + .build(); event.setEventId(EVENT_ID); event.setKeywords(KEYWORDS); event.setHosts(objectMapper.readTree(EXAMPLE_HOSTS_TREE_STRING)); @@ -56,15 +62,17 @@ void setup() throws JsonMappingException, JsonProcessingException { @Test void testList() throws Exception { - when(eventsService.list()).thenReturn(Collections.singletonList(event)); + + Page mockEventPage = new PageImpl<>(Collections.singletonList(event)); + Pageable pageable = Pageable.ofSize(20).withPage(0); + when(eventsService.list(pageable)).thenReturn(mockEventPage); mvc.perform(get("/api/event")) .andExpect(status().isOk()) .andExpect(jsonPath("$.ok", equalTo(true))) - .andExpect(jsonPath("$.response", iterableWithSize(1))) - .andExpect(jsonPath("$.response[0].eventId",equalTo(EVENT_ID))) - .andExpect(jsonPath("$.response[0].keywords",equalTo(KEYWORDS))) - .andExpect(jsonPath("$.response[0].hosts.name",equalTo(HOST_NAME))); - + .andExpect(jsonPath("$.response.content", iterableWithSize(1))) + .andExpect(jsonPath("$.response.content[0].eventId", equalTo(EVENT_ID))) + .andExpect(jsonPath("$.response.content[0].keywords", equalTo(KEYWORDS))) + .andExpect(jsonPath("$.response.content[0].hosts.name", equalTo(HOST_NAME))); } } diff --git a/src/test/java/org/ieeervce/api/siterearnouveau/service/EventsServiceTest.java b/src/test/java/org/ieeervce/api/siterearnouveau/service/EventsServiceTest.java index 92f7596..d198c8e 100644 --- a/src/test/java/org/ieeervce/api/siterearnouveau/service/EventsServiceTest.java +++ b/src/test/java/org/ieeervce/api/siterearnouveau/service/EventsServiceTest.java @@ -1,10 +1,5 @@ package org.ieeervce.api.siterearnouveau.service; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; - -import java.util.Collections; - import org.ieeervce.api.siterearnouveau.entity.Event; import org.ieeervce.api.siterearnouveau.repository.EventsRepository; import org.junit.jupiter.api.Test; @@ -12,21 +7,31 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.domain.*; + +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class EventsServiceTest { @Mock EventsRepository eventsRepository; @InjectMocks - EventsService eventsService; + EventsService eventsService; @Mock Event event; @Test - void testList(){ - when(eventsRepository.findAll()).thenReturn(Collections.singletonList(event)); - var eventsList = eventsService.list(); - assertThat(eventsList).isNotNull().singleElement().isSameAs(event); + void testList() { + Pageable pageable = Pageable.ofSize(20).withPage(0); + Page eventPage = new PageImpl<>(Collections.singletonList(event), pageable, 1); + pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("eventStartTime").ascending()); + when(eventsRepository.findAll(pageable)).thenReturn(eventPage); + Page results = eventsService.list(pageable); + assertThat(results).isNotNull(); + assertThat(results.getContent()).containsExactly(event); } }