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