package de.fd.fh.server.game.web; 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 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 { @Mock Request request; @Mock Response response; @Mock GameService service; @BeforeEach void before() { MockitoAnnotations.openMocks(this); } @Test void testCreateGame() throws IOException { 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()); } }