From 373b63dc530bcaa46f745e1c30ad8ec44f1e1ce9 Mon Sep 17 00:00:00 2001 From: Steffen Nitschke Date: Wed, 3 Feb 2021 20:54:11 +0100 Subject: [PATCH] add createGame-Method and Test --- .../fd/fh/server/game/web/GameController.java | 40 +++++++++++++++++ .../server/game/web/GameControllerTest.java | 44 +++++++++++++++---- .../network/messages/CreateGameRequest.java | 14 ++++++ 3 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 fh.fd.ci.server/src/main/java/de/fd/fh/server/game/web/GameController.java create mode 100644 fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/CreateGameRequest.java diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/game/web/GameController.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/game/web/GameController.java new file mode 100644 index 0000000..997d438 --- /dev/null +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/game/web/GameController.java @@ -0,0 +1,40 @@ +package de.fd.fh.server.game.web; + +import com.fasterxml.jackson.databind.ObjectMapper; +import de.fd.fh.server.game.GameId; +import de.fd.fh.server.game.GameService; +import de.fd.fh.server.user.UserId; +import de.fd.fh.shared.network.messages.CreateGameRequest; +import lombok.RequiredArgsConstructor; +import spark.Request; +import spark.Response; + +import java.io.IOException; + +@RequiredArgsConstructor +public class GameController +{ + private final ObjectMapper objectMapper = new ObjectMapper(); + + private final GameService service; + + public void createGame(final Request request, final Response response) throws IOException + { + final CreateGameRequest createRequest = objectMapper.readValue(request.body(), CreateGameRequest.class); + + final UserId whiteUser = UserId.of(createRequest.getWhiteUserId()); + final UserId blackUser = UserId.of(createRequest.getBlackUserId()); + + final GameId gameId = service.createGame(blackUser, whiteUser); + + if (gameId == null) + { + response.status(400); + } + else + { + response.body(objectMapper.writeValueAsString(gameId)); + response.status(201); + } + } +} diff --git a/fh.fd.ci.server/src/test/java/de/fd/fh/server/game/web/GameControllerTest.java b/fh.fd.ci.server/src/test/java/de/fd/fh/server/game/web/GameControllerTest.java index 8044d9b..7c4234e 100644 --- a/fh.fd.ci.server/src/test/java/de/fd/fh/server/game/web/GameControllerTest.java +++ b/fh.fd.ci.server/src/test/java/de/fd/fh/server/game/web/GameControllerTest.java @@ -1,17 +1,20 @@ package de.fd.fh.server.game.web; -import de.fd.fh.server.access.AccessToken; import de.fd.fh.server.game.GameId; import de.fd.fh.server.game.GameService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import spark.Request; import spark.Response; -import spark.Session; +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class GameControllerTest @@ -21,8 +24,6 @@ public class GameControllerTest @Mock Response response; @Mock - Session session; - @Mock GameService service; @BeforeEach @@ -32,12 +33,39 @@ public class GameControllerTest } @Test - void testCreateGameTest() + void testCreateGame() throws IOException { - when(request.body()).thenReturn("{\"userName\":\"TestName\",\"password\":\"TestPassword\"}"); - when(request.session()).thenReturn(session); - when(service.createGame(any())).thenReturn(GameId.random()); + when(request.body()).thenReturn("{\"whiteUserId\":\"12345\",\"blackUserId\":\"98765\"}"); + when(service.createGame(any(), any())).thenReturn(GameId.of("56789")); + + ArgumentCaptor bodyCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(Integer.class); new GameController(service).createGame(request, response); + + verify(response).body(bodyCaptor.capture()); + verify(response).status(statusCaptor.capture()); + + assertNotNull(bodyCaptor.getValue()); + assertTrue(bodyCaptor.getValue().contains("56789")); + + assertNotNull(statusCaptor.getValue()); + assertEquals(201, statusCaptor.getValue()); + } + + @Test + void testFailedCreateGame() throws IOException + { + when(request.body()).thenReturn("{\"whiteUserId\":\"12345\",\"blackUserId\":\"98765\"}"); + when(service.createGame(any(), any())).thenReturn(null); + + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(Integer.class); + + new GameController(service).createGame(request, response); + + verify(response).status(statusCaptor.capture()); + + assertNotNull(statusCaptor.getValue()); + assertEquals(400, statusCaptor.getValue()); } } diff --git a/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/CreateGameRequest.java b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/CreateGameRequest.java new file mode 100644 index 0000000..b5f0e42 --- /dev/null +++ b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/CreateGameRequest.java @@ -0,0 +1,14 @@ +package de.fd.fh.shared.network.messages; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class CreateGameRequest +{ + private String whiteUserId; + private String blackUserId; +}