From cf612a934b3af30f36d0c5ae9c55c5d5b61256dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrej=20=C5=A0imurka?= <492781@mail.muni.cz> Date: Sun, 16 Apr 2023 23:19:02 +0200 Subject: [PATCH] Race Service tests --- .../pa165/race/rest/RaceControllerTest.java | 4 - .../pa165/race/rest/SeasonControllerTest.java | 98 +++++---------- .../pa165/race/rest/SeasonServiceTest.java | 119 ++++++++++++++++++ .../muni/pa165/race/rest/SeasonTestUtil.java | 5 + 4 files changed, 153 insertions(+), 73 deletions(-) create mode 100644 race/src/test/java/cz/muni/pa165/race/rest/SeasonServiceTest.java diff --git a/race/src/test/java/cz/muni/pa165/race/rest/RaceControllerTest.java b/race/src/test/java/cz/muni/pa165/race/rest/RaceControllerTest.java index 7e0756d1..10b691d9 100644 --- a/race/src/test/java/cz/muni/pa165/race/rest/RaceControllerTest.java +++ b/race/src/test/java/cz/muni/pa165/race/rest/RaceControllerTest.java @@ -44,10 +44,6 @@ class RaceControllerTest { @Autowired private ObjectMapper objectMapper; - @BeforeEach - void initialize() { - } - @Test void createRace() throws Exception { var raceDto = RaceTestUtil.getDaoRaceDto(); diff --git a/race/src/test/java/cz/muni/pa165/race/rest/SeasonControllerTest.java b/race/src/test/java/cz/muni/pa165/race/rest/SeasonControllerTest.java index 61647089..be3a1ac7 100644 --- a/race/src/test/java/cz/muni/pa165/race/rest/SeasonControllerTest.java +++ b/race/src/test/java/cz/muni/pa165/race/rest/SeasonControllerTest.java @@ -1,11 +1,19 @@ package cz.muni.pa165.race.rest; +import com.fasterxml.jackson.databind.ObjectMapper; +import cz.muni.pa165.common_library.dtos.RaceDto; import cz.muni.pa165.race.data.model.Season; import cz.muni.pa165.race.data.repository.SeasonRepository; +import cz.muni.pa165.race.service.RaceServiceI; +import cz.muni.pa165.race.service.SeasonServiceI; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; @@ -25,95 +33,47 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@SpringBootTest @AutoConfigureMockMvc -public class SeasonControllerTest { - private String bodyContent = """ - { - "id": 1, - "year": 2020, - "races": [] - } - """; - private String expectedMessagePost = "{\"id\":1,\"year\":2023,\"races\":[]}"; - +@WebMvcTest(SeasonController.class) +@ExtendWith(MockitoExtension.class) +class SeasonControllerTest { @Autowired private MockMvc mockMvc; @MockBean - private SeasonRepository seasonRepository; - - @BeforeEach - void setup() { - Season seasonDao = SeasonTestUtil.getDaoSeason(); - given(seasonRepository.save(any(Season.class))).willReturn( - seasonDao); - given(seasonRepository.findById(anyLong())).willReturn( - Optional.of(seasonDao)); - given(seasonRepository.findAll()).willReturn(List.of(seasonDao)); - } + private SeasonServiceI seasonServiceMock; + @Autowired + private ObjectMapper objectMapper; @Test - void createSeason() throws Exception { - var request = post("/season/") - .content(bodyContent) - .contentType(MediaType.APPLICATION_JSON_VALUE); + void createSeason() { + var seasonDto = SeasonTestUtil.getDaoSeason() + given(raceServiceMock.postRace(raceDto)).willReturn(raceDto); + + String response = mockMvc.perform(post("/race/") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(raceDto))) + .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); - this.mockMvc.perform(request) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(expectedMessagePost)); + RaceDto raceDtoResponse = objectMapper.readValue(response, RaceDto.class); + Assertions.assertEquals(raceDtoResponse, raceDto); } @Test - void deleteRace() throws Exception { - String expectedMessage = "Season with id: 1was succesfully deleted"; - - var requestDelete = delete("/season/") - .param("seasonId", "1") - .contentType(MediaType.APPLICATION_JSON_VALUE); - this.mockMvc.perform(requestDelete) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(expectedMessage)); + void getSeason() { } @Test - void getExistingRace() throws Exception { - String expectedMessage = "{\"id\":1,\"year\":2023,\"races\":[]}"; - - var requestGet = get("/season/id") - .param("seasonId", "1") - .contentType(MediaType.APPLICATION_JSON_VALUE); - this.mockMvc.perform(requestGet) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(expectedMessage)); + void getAllSeasons() { } @Test - void getAllRaces() throws Exception { - var requestGet = get("/season/"); - String expectedMessage = "[{\"id\":1,\"year\":2023,\"races\":[]}]"; - - this.mockMvc.perform(requestGet) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(expectedMessage)); + void deleteSeason() { } @Test - void addRace() throws Exception { - var requestPatch = patch("/season/addRace") - .param("seasonId", "1") - .param("raceId", "1"); - String expectedMessage = "[{\"id\":1,\"year\":2023,\"races\":[]}]"; - - this.mockMvc.perform(requestPatch) - .andDo(print()) - .andExpect(status().isOk()) - .andExpect(content().string(expectedMessage)); + void addRace() { } -} +} \ No newline at end of file diff --git a/race/src/test/java/cz/muni/pa165/race/rest/SeasonServiceTest.java b/race/src/test/java/cz/muni/pa165/race/rest/SeasonServiceTest.java new file mode 100644 index 00000000..ab6b3a6e --- /dev/null +++ b/race/src/test/java/cz/muni/pa165/race/rest/SeasonServiceTest.java @@ -0,0 +1,119 @@ +package cz.muni.pa165.race.rest; + +import cz.muni.pa165.race.data.model.Season; +import cz.muni.pa165.race.data.repository.SeasonRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.List; +import java.util.Optional; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +public class SeasonServiceTest { + private String bodyContent = """ + { + "id": 1, + "year": 2020, + "races": [] + } + """; + private String expectedMessagePost = "{\"id\":1,\"year\":2023,\"races\":[]}"; + + + @Autowired + private MockMvc mockMvc; + + @MockBean + private SeasonRepository seasonRepository; + + @BeforeEach + void setup() { + Season seasonDao = SeasonTestUtil.getDaoSeason(); + given(seasonRepository.save(any(Season.class))).willReturn( + seasonDao); + given(seasonRepository.findById(anyLong())).willReturn( + Optional.of(seasonDao)); + given(seasonRepository.findAll()).willReturn(List.of(seasonDao)); + } + + + @Test + void createSeason() throws Exception { + var request = post("/season/") + .content(bodyContent) + .contentType(MediaType.APPLICATION_JSON_VALUE); + + this.mockMvc.perform(request) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(expectedMessagePost)); + } + + @Test + void deleteRace() throws Exception { + String expectedMessage = "Season with id: 1was succesfully deleted"; + + var requestDelete = delete("/season/") + .param("seasonId", "1") + .contentType(MediaType.APPLICATION_JSON_VALUE); + this.mockMvc.perform(requestDelete) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(expectedMessage)); + } + + @Test + void getExistingRace() throws Exception { + String expectedMessage = "{\"id\":1,\"year\":2023,\"races\":[]}"; + + var requestGet = get("/season/id") + .param("seasonId", "1") + .contentType(MediaType.APPLICATION_JSON_VALUE); + this.mockMvc.perform(requestGet) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(expectedMessage)); + } + + @Test + void getAllRaces() throws Exception { + var requestGet = get("/season/"); + String expectedMessage = "[{\"id\":1,\"year\":2023,\"races\":[]}]"; + + this.mockMvc.perform(requestGet) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(expectedMessage)); + } + + @Test + void addRace() throws Exception { + var requestPatch = patch("/season/addRace") + .param("seasonId", "1") + .param("raceId", "1"); + String expectedMessage = "[{\"id\":1,\"year\":2023,\"races\":[]}]"; + + this.mockMvc.perform(requestPatch) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(expectedMessage)); + } +} diff --git a/race/src/test/java/cz/muni/pa165/race/rest/SeasonTestUtil.java b/race/src/test/java/cz/muni/pa165/race/rest/SeasonTestUtil.java index 4655a413..b0ae4c0a 100644 --- a/race/src/test/java/cz/muni/pa165/race/rest/SeasonTestUtil.java +++ b/race/src/test/java/cz/muni/pa165/race/rest/SeasonTestUtil.java @@ -1,5 +1,6 @@ package cz.muni.pa165.race.rest; +import cz.muni.pa165.common_library.dtos.SeasonDto; import cz.muni.pa165.race.data.model.Season; import java.util.ArrayList; @@ -14,4 +15,8 @@ public class SeasonTestUtil { .races(new ArrayList<>()) .build(); } + + public static SeasonDto getDaoSeasonDto() { + + } } -- GitLab