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.

106 lines
3.6 KiB

3 years ago
3 years ago
  1. package de.fd.fh.server.game;
  2. import de.fd.fh.server.user.UserId;
  3. import dev.morphia.Key;
  4. import org.junit.jupiter.api.Test;
  5. import org.mockito.ArgumentCaptor;
  6. import java.util.List;
  7. import java.util.Set;
  8. import static org.junit.jupiter.api.Assertions.*;
  9. import static org.mockito.ArgumentMatchers.any;
  10. import static org.mockito.BDDMockito.then;
  11. import static org.mockito.Mockito.*;
  12. class GameServiceTest
  13. {
  14. @Test
  15. void testCreateGame()
  16. {
  17. final GameRepository repository = when(mock(GameRepository.class).save(any()))
  18. .thenReturn(new Key<>(Game.class, "testCollection", GameId.of("98765")))
  19. .getMock();
  20. final Game game = new Game();
  21. final GameId result = new GameService(repository).createGame(game);
  22. assertNotNull(result);
  23. assertEquals("98765", result.getIdentifier());
  24. }
  25. @Test
  26. void given_twoUserIds_when_initGame_should_initGame()
  27. {
  28. final UserId blackPlayer = UserId.of("12345");
  29. final UserId whitePlayer = UserId.of("98765");
  30. final GameRepository repository = when(mock(GameRepository.class).save(any()))
  31. .thenReturn(new Key<>(Game.class, "testCollection", GameId.of("4242")))
  32. .getMock();
  33. final ArgumentCaptor<Game> captor = ArgumentCaptor.forClass(Game.class);
  34. final GameId result = new GameService(repository).createGame(blackPlayer, whitePlayer);
  35. verify(repository).save(captor.capture());
  36. assertEquals("4242", result.getIdentifier());
  37. assertNotNull(captor.getValue());
  38. final Game savedGame = captor.getValue();
  39. assertEquals("12345", savedGame.getBlackPlayer().getIdentifier());
  40. assertEquals("98765", savedGame.getWhitePlayer().getIdentifier());
  41. assertEquals("98765", savedGame.getCurrentPlayer().getIdentifier());
  42. assertEquals(64, savedGame.getFields().size());
  43. final Set<Field> fields = savedGame.getFields();
  44. fields.forEach(field -> {
  45. final Field.Color expected = (field.getX() + field.getY()) % 2 != 1 ? Field.Color.WHITE : Field.Color.BLACK;
  46. if (field.getX() == 0 || field.getX() == 1 || field.getX() == 6 || field.getX() == 7)
  47. {
  48. assertNotNull(field.getFigure());
  49. }
  50. else
  51. {
  52. assertNull(field.getFigure());
  53. }
  54. assertEquals(expected, field.getColor());
  55. });
  56. then(repository).should().save(any(Game.class));
  57. then(repository).shouldHaveNoMoreInteractions();
  58. }
  59. @Test
  60. void given_storedGame_when_findGameById_should_returnGame()
  61. {
  62. final GameRepository repository = when(mock(GameRepository.class).findByGameId(any(GameId.class)))
  63. .thenReturn(new Game(null, null, null, null, null, null))
  64. .getMock();
  65. final Game result = new GameService(repository).findGameById(GameId.of("12345"));
  66. assertNotNull(result);
  67. }
  68. @Test
  69. void given_storedGames_when_findGamesOfUser_should_returnSetOfGames()
  70. {
  71. final GameRepository repository = when(mock(GameRepository.class).findRunningGamesOfPlayer(any(UserId.class)))
  72. .thenReturn(List.of(
  73. new Game(GameId.random(), UserId.of("12345"), UserId.random(), null, null, null),
  74. new Game(GameId.random(), UserId.random(), UserId.of("12345"), null, null, null)))
  75. .getMock();
  76. final List<Game> result = new GameService(repository).findRunningGamesOfUser(UserId.of("12345"));
  77. assertEquals(2, result.size());
  78. }
  79. }