You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
4.7 KiB

  1. package de.fd.fh.server.game.web;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import de.fd.fh.server.game.Game;
  4. import de.fd.fh.server.game.GameId;
  5. import de.fd.fh.server.game.GameService;
  6. import org.junit.jupiter.api.BeforeEach;
  7. import org.junit.jupiter.api.Test;
  8. import org.mockito.ArgumentCaptor;
  9. import org.mockito.Mock;
  10. import org.mockito.MockitoAnnotations;
  11. import spark.Request;
  12. import spark.Response;
  13. import java.io.IOException;
  14. import java.util.List;
  15. import static org.junit.jupiter.api.Assertions.*;
  16. import static org.mockito.ArgumentMatchers.any;
  17. import static org.mockito.Mockito.verify;
  18. import static org.mockito.Mockito.when;
  19. public class GameControllerTest
  20. {
  21. @Mock
  22. Request request;
  23. @Mock
  24. Response response;
  25. @Mock
  26. GameService service;
  27. @BeforeEach
  28. void before()
  29. {
  30. MockitoAnnotations.openMocks(this);
  31. }
  32. @Test
  33. void testCreateGame() throws IOException
  34. {
  35. when(request.body()).thenReturn("{\"whiteUserId\":\"12345\",\"blackUserId\":\"98765\"}");
  36. when(service.createGame(any(), any())).thenReturn(GameId.of("56789"));
  37. final ArgumentCaptor<String> bodyCaptor = ArgumentCaptor.forClass(String.class);
  38. final ArgumentCaptor<Integer> statusCaptor = ArgumentCaptor.forClass(Integer.class);
  39. new GameController(service).createGame(request, response);
  40. verify(response).body(bodyCaptor.capture());
  41. verify(response).status(statusCaptor.capture());
  42. assertNotNull(bodyCaptor.getValue());
  43. assertTrue(bodyCaptor.getValue().contains("56789"));
  44. assertNotNull(statusCaptor.getValue());
  45. assertEquals(201, statusCaptor.getValue());
  46. }
  47. @Test
  48. void testFailedCreateGame() throws IOException
  49. {
  50. when(request.body()).thenReturn("{\"whiteUserId\":\"12345\",\"blackUserId\":\"98765\"}");
  51. when(service.createGame(any(), any())).thenReturn(null);
  52. final ArgumentCaptor<Integer> statusCaptor = ArgumentCaptor.forClass(Integer.class);
  53. new GameController(service).createGame(request, response);
  54. verify(response).status(statusCaptor.capture());
  55. assertNotNull(statusCaptor.getValue());
  56. assertEquals(400, statusCaptor.getValue());
  57. }
  58. @Test
  59. void testFindGameById() throws IOException
  60. {
  61. when(request.params(any())).thenReturn("12345");
  62. when(service.findGameById(any())).thenReturn(new Game());
  63. final ArgumentCaptor<String> bodyCaptor = ArgumentCaptor.forClass(String.class);
  64. final ArgumentCaptor<Integer> statusCaptor = ArgumentCaptor.forClass(Integer.class);
  65. new GameController(service).findGameById(request, response);
  66. verify(response).body(bodyCaptor.capture());
  67. verify(response).status(statusCaptor.capture());
  68. assertNotNull(bodyCaptor.getValue());
  69. assertNotNull(statusCaptor.getValue());
  70. assertEquals(200, statusCaptor.getValue());
  71. }
  72. @Test
  73. void testFailedFindGameById() throws IOException
  74. {
  75. when(request.params(any())).thenReturn("12345");
  76. when(service.findGameById(any())).thenReturn(null);
  77. final ArgumentCaptor<Integer> statusCaptor = ArgumentCaptor.forClass(Integer.class);
  78. new GameController(service).findGameById(request, response);
  79. verify(response).status(statusCaptor.capture());
  80. assertNotNull(statusCaptor.getValue());
  81. assertEquals(404, statusCaptor.getValue());
  82. }
  83. @Test
  84. void testFindRunningGamesOfUser() throws JsonProcessingException
  85. {
  86. when(request.params(any())).thenReturn("12345");
  87. when(service.findRunningGamesOfUser(any())).thenReturn(List.of(new Game(), new Game()));
  88. final ArgumentCaptor<String> bodyCaptor = ArgumentCaptor.forClass(String.class);
  89. final ArgumentCaptor<Integer> statusCaptor = ArgumentCaptor.forClass(Integer.class);
  90. new GameController(service).findRunningGamesOfUser(request, response);
  91. verify(response).body(bodyCaptor.capture());
  92. verify(response).status(statusCaptor.capture());
  93. assertNotNull(bodyCaptor.getValue());
  94. assertNotNull(statusCaptor.getValue());
  95. assertEquals(200, statusCaptor.getValue());
  96. }
  97. @Test
  98. void testFailedFindRunningGamesOfUser() throws JsonProcessingException
  99. {
  100. when(request.params(any())).thenReturn("12345");
  101. when(service.findRunningGamesOfUser(any())).thenReturn(null);
  102. final ArgumentCaptor<Integer> statusCaptor = ArgumentCaptor.forClass(Integer.class);
  103. new GameController(service).findRunningGamesOfUser(request, response);
  104. verify(response).status(statusCaptor.capture());
  105. assertNotNull(statusCaptor.getValue());
  106. assertEquals(404, statusCaptor.getValue());
  107. }
  108. }