From 3244966b8b6b450e92aaf718ba878c1d433c0f6e 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:37:33 +0200
Subject: [PATCH] Added season controller tests

---
 .../pa165/race/rest/SeasonControllerTest.java | 79 +++++++++++++------
 .../muni/pa165/race/rest/SeasonTestUtil.java  |  6 +-
 2 files changed, 58 insertions(+), 27 deletions(-)

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 be3a1ac7..7ee98bd5 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,38 +1,27 @@
 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.common_library.dtos.SeasonDto;
 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 static org.mockito.BDDMockito.given;
 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;
 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;
 
+import java.util.List;
+
 @AutoConfigureMockMvc
 @WebMvcTest(SeasonController.class)
 @ExtendWith(MockitoExtension.class)
@@ -48,32 +37,70 @@ class SeasonControllerTest {
   private ObjectMapper objectMapper;
 
   @Test
-  void createSeason() {
-    var seasonDto = SeasonTestUtil.getDaoSeason()
-    given(raceServiceMock.postRace(raceDto)).willReturn(raceDto);
+  void createSeason() throws Exception {
+    var seasonDto = SeasonTestUtil.getDaoSeasonDto();
+    given(seasonServiceMock.postSeason(seasonDto)).willReturn(seasonDto);
 
-    String response = mockMvc.perform(post("/race/")
+    String response = mockMvc.perform(post("/season/")
             .contentType(MediaType.APPLICATION_JSON)
-            .content(objectMapper.writeValueAsString(raceDto)))
+            .content(objectMapper.writeValueAsString(seasonDto)))
         .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
 
-    RaceDto raceDtoResponse = objectMapper.readValue(response, RaceDto.class);
-    Assertions.assertEquals(raceDtoResponse, raceDto);
+    SeasonDto seasonDtoResponse = objectMapper.readValue(response, SeasonDto.class);
+    Assertions.assertEquals(seasonDtoResponse, seasonDto);
   }
 
   @Test
-  void getSeason() {
+  void getSeason() throws Exception {
+    var seasonDto = SeasonTestUtil.getDaoSeasonDto();
+    given(seasonServiceMock.getSeasonById(1L)).willReturn(seasonDto);
+
+    String response = mockMvc.perform(get("/season/id")
+            .param("seasonId", String.valueOf(1L))
+            .contentType(MediaType.APPLICATION_JSON))
+        .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
+
+    SeasonDto seasonDtoResponse = objectMapper.readValue(response, SeasonDto.class);
+    Assertions.assertEquals(seasonDtoResponse, seasonDto);
   }
 
   @Test
-  void getAllSeasons() {
+  void getAllSeasons() throws Exception {
+    var seasonDto = SeasonTestUtil.getDaoSeasonDto();
+    given(seasonServiceMock.getAllSeasons()).willReturn(List.of(seasonDto));
+
+    String response = mockMvc.perform(get("/season/")
+            .contentType(MediaType.APPLICATION_JSON))
+        .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
+
+    List<SeasonDto> seasonDtoResponse = List.of(objectMapper.readValue(response, SeasonDto[].class));
+    Assertions.assertEquals(seasonDtoResponse, List.of(seasonDto));
   }
 
   @Test
-  void deleteSeason() {
+  void deleteSeason() throws Exception {
+    var seasonDto = SeasonTestUtil.getDaoSeasonDto();
+    given(seasonServiceMock.deleteById(1L)).willReturn("Season with id: " + 1L + "was succesfully deleted");
+
+    String response = mockMvc.perform(delete("/season/")
+            .param("seasonId", String.valueOf(1L))
+            .contentType(MediaType.APPLICATION_JSON))
+        .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
+
+    Assertions.assertEquals(response, "Season with id: " + 1L + "was succesfully deleted");
   }
 
   @Test
-  void addRace() {
+  void addRace() throws Exception {
+    var seasonDto = SeasonTestUtil.getDaoSeasonDto();
+    given(seasonServiceMock.addRace(1L, 1L)).willReturn(seasonDto);
+
+    String response = mockMvc.perform(patch("/season/addRace")
+            .param("seasonId", String.valueOf(1L))
+            .param("raceId", String.valueOf(1L))
+            .contentType(MediaType.APPLICATION_JSON))
+        .andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
+    SeasonDto seasonDtoResponse = objectMapper.readValue(response, SeasonDto.class);
+    Assertions.assertEquals(seasonDtoResponse, seasonDto);
   }
 }
\ No newline at end of file
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 b0ae4c0a..abd3604e 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
@@ -17,6 +17,10 @@ public class SeasonTestUtil {
   }
 
   public static SeasonDto getDaoSeasonDto() {
-
+    return SeasonDto.builder()
+        .id(1L)
+        .races(new ArrayList<>())
+        .year(2023)
+        .build();
   }
 }
-- 
GitLab