From e388bb0020d020c9375ac5e9e0b835662013f376 Mon Sep 17 00:00:00 2001 From: mehdiboudjoudi Date: Wed, 26 Feb 2025 11:51:45 +0100 Subject: [PATCH] TD-34: Solved comments made by reviewer --- api/api.yml | 6 +- .../server/admin/AdminApiController.java | 12 ++- .../server/utils/PlayerMapperService.java | 14 +++- .../server/server/GetAllPlayersTest.java | 83 +++++++++++++++++++ 4 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 src/test/java/de/towerdefence/server/server/GetAllPlayersTest.java diff --git a/api/api.yml b/api/api.yml index 15aa501..29a8d7d 100644 --- a/api/api.yml +++ b/api/api.yml @@ -59,9 +59,9 @@ components: required: - username ############################################# - # PlayerApiModel # + # AdministratablePlayer # ############################################# - PlayerApiModel: + AdministratablePlayer: description: a Player type: object properties: @@ -205,7 +205,7 @@ paths: schema: type: array items: - $ref: "#/components/schemas/PlayerApiModel" + $ref: "#/components/schemas/AdministratablePlayer" 401: $ref: "#/components/responses/401Unauthorized" 500: diff --git a/src/main/java/de/towerdefence/server/admin/AdminApiController.java b/src/main/java/de/towerdefence/server/admin/AdminApiController.java index 35c2c25..8f066ec 100644 --- a/src/main/java/de/towerdefence/server/admin/AdminApiController.java +++ b/src/main/java/de/towerdefence/server/admin/AdminApiController.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import de.towerdefence.server.auth.UserSession; import de.towerdefence.server.oas.AdminApi; import de.towerdefence.server.oas.models.AdminAuthInfo; +import de.towerdefence.server.oas.models.AdministratablePlayer; import de.towerdefence.server.oas.models.GetAllPlayersConfigurationData; -import de.towerdefence.server.oas.models.PlayerApiModel; import de.towerdefence.server.player.Player; import de.towerdefence.server.player.PlayerRepository; import de.towerdefence.server.utils.PlayerMapperService; @@ -54,7 +54,7 @@ public class AdminApiController implements AdminApi { } @Override - public ResponseEntity> getAllPlayers(GetAllPlayersConfigurationData body) { + public ResponseEntity> getAllPlayers(GetAllPlayersConfigurationData body) { var order = body.getOrder(); var page = body.getPage(); @@ -76,8 +76,12 @@ public class AdminApiController implements AdminApi { playerPage = playerRepository.findAll(pageable); } - List playersMapped = playerMapperService.mapPlayerToApiPlayers(playerPage.getContent()); + List playersMapped = playerMapperService.mapPlayersToAdministratablePlayers(playerPage.getContent()); - return playersMapped.isEmpty() ? ResponseEntity.noContent().build() : ResponseEntity.ok(playersMapped); + if (playersMapped.isEmpty()) { + return ResponseEntity.noContent().build(); + } else { + return ResponseEntity.ok(playersMapped); + } } } diff --git a/src/main/java/de/towerdefence/server/utils/PlayerMapperService.java b/src/main/java/de/towerdefence/server/utils/PlayerMapperService.java index da02c2c..9d01960 100644 --- a/src/main/java/de/towerdefence/server/utils/PlayerMapperService.java +++ b/src/main/java/de/towerdefence/server/utils/PlayerMapperService.java @@ -1,6 +1,6 @@ package de.towerdefence.server.utils; -import de.towerdefence.server.oas.models.PlayerApiModel; +import de.towerdefence.server.oas.models.AdministratablePlayer; import de.towerdefence.server.player.Player; import org.springframework.stereotype.Component; @@ -10,13 +10,19 @@ import java.util.List; @Component public class PlayerMapperService { - public List mapPlayerToApiPlayers(List players) { - List apiPlayers = new ArrayList<>(); + public List mapPlayersToAdministratablePlayers(List players) { + List apiPlayers = new ArrayList<>(); for (Player player : players) { - PlayerApiModel apiPlayer = new PlayerApiModel(); + AdministratablePlayer apiPlayer = new AdministratablePlayer(); apiPlayer.setUsername(player.getUsername()); apiPlayers.add(apiPlayer); } return apiPlayers; } + + public AdministratablePlayer mapPlayerToAdministratablePlayer(Player player) { + AdministratablePlayer apiPlayer = new AdministratablePlayer(); + apiPlayer.setUsername(player.getUsername()); + return apiPlayer; + } } diff --git a/src/test/java/de/towerdefence/server/server/GetAllPlayersTest.java b/src/test/java/de/towerdefence/server/server/GetAllPlayersTest.java new file mode 100644 index 0000000..66a0cd7 --- /dev/null +++ b/src/test/java/de/towerdefence/server/server/GetAllPlayersTest.java @@ -0,0 +1,83 @@ +package de.towerdefence.server.server; + +import de.towerdefence.server.IntegrationTest; +import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; + +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; + +class GetAllPlayersTest extends IntegrationTest { + + private MockHttpServletRequestBuilder createGetAllPlayersRequest(String requestBody) { + return MockMvcRequestBuilders.get(baseUri + "/admin/players") + .contentType(MediaType.APPLICATION_JSON) + .content(requestBody); + } + + @Test + void playersExist() throws Exception { + String requestBody = "{" + + "\"page\": 0," + + "\"pageSize\": 10," + + "\"sortBy\": \"username\"," + + "\"order\": \"descending\"," + + "\"username\": \"\"" + + "}"; + + this.mvc.perform(createGetAllPlayersRequest(requestBody)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$[0]").exists()); + } + + @Test + void playersSortedByAsc() throws Exception { + String requestBody = "{" + + "\"page\": 0," + + "\"pageSize\": 10," + + "\"sortBy\": \"username\"," + + "\"order\": \"ascending\"," + + "\"username\": \"\"" + + "}"; + + this.mvc.perform(createGetAllPlayersRequest(requestBody)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].username").value("Alex")) + .andExpect(jsonPath("$[1].username").value("Zorro")); + } + + @Test + void playersSortedByDesc() throws Exception { + String requestBody = "{" + + "\"page\": 0," + + "\"pageSize\": 10," + + "\"sortBy\": \"username\"," + + "\"order\": \"descending\"," + + "\"username\": \"\"" + + "}"; + + this.mvc.perform(createGetAllPlayersRequest(requestBody)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[1].username").value("Alex")) + .andExpect(jsonPath("$[0].username").value("Zorro")); + } + + @Test + void playersFiltered() throws Exception { + String requestBody = "{" + + "\"page\": 0," + + "\"pageSize\": 10," + + "\"username\": \"Alex\","+ + "\"order\": \"ascending\""+ + "}"; + + this.mvc.perform(createGetAllPlayersRequest(requestBody)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$").isArray()) + .andExpect(jsonPath("$[0].username").value("Alex")) + .andExpect(jsonPath("$").isNotEmpty()); + } +} \ No newline at end of file