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.
107 lines
3.6 KiB
107 lines
3.6 KiB
package de.fd.fh.server.game;
|
|
|
|
import de.fd.fh.server.user.UserId;
|
|
import dev.morphia.Key;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.mockito.ArgumentCaptor;
|
|
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.BDDMockito.then;
|
|
import static org.mockito.Mockito.*;
|
|
|
|
class GameServiceTest
|
|
{
|
|
@Test
|
|
void testCreateGame()
|
|
{
|
|
final GameRepository repository = when(mock(GameRepository.class).save(any()))
|
|
.thenReturn(new Key<>(Game.class, "testCollection", GameId.of("98765")))
|
|
.getMock();
|
|
|
|
final Game game = new Game();
|
|
|
|
final GameId result = new GameService(repository).createGame(game);
|
|
|
|
assertNotNull(result);
|
|
assertEquals("98765", result.getIdentifier());
|
|
}
|
|
|
|
@Test
|
|
void given_twoUserIds_when_initGame_should_initGame()
|
|
{
|
|
final UserId blackPlayer = UserId.of("12345");
|
|
final UserId whitePlayer = UserId.of("98765");
|
|
|
|
final GameRepository repository = when(mock(GameRepository.class).save(any()))
|
|
.thenReturn(new Key<>(Game.class, "testCollection", GameId.of("4242")))
|
|
.getMock();
|
|
|
|
final ArgumentCaptor<Game> captor = ArgumentCaptor.forClass(Game.class);
|
|
|
|
final GameId result = new GameService(repository).createGame(blackPlayer, whitePlayer);
|
|
|
|
verify(repository).save(captor.capture());
|
|
|
|
assertEquals("4242", result.getIdentifier());
|
|
|
|
assertNotNull(captor.getValue());
|
|
|
|
final Game savedGame = captor.getValue();
|
|
|
|
assertEquals("12345", savedGame.getBlackPlayer().getIdentifier());
|
|
assertEquals("98765", savedGame.getWhitePlayer().getIdentifier());
|
|
assertEquals("98765", savedGame.getCurrentPlayer().getIdentifier());
|
|
assertEquals(64, savedGame.getFields().size());
|
|
|
|
final Set<Field> fields = savedGame.getFields();
|
|
|
|
fields.forEach(field -> {
|
|
|
|
final Field.Color expected = (field.getX() + field.getY()) % 2 != 1 ? Field.Color.WHITE : Field.Color.BLACK;
|
|
|
|
if (field.getX() == 0 || field.getX() == 1 || field.getX() == 6 || field.getX() == 7)
|
|
{
|
|
assertNotNull(field.getFigure());
|
|
}
|
|
else
|
|
{
|
|
assertNull(field.getFigure());
|
|
}
|
|
|
|
assertEquals(expected, field.getColor());
|
|
});
|
|
|
|
then(repository).should().save(any(Game.class));
|
|
then(repository).shouldHaveNoMoreInteractions();
|
|
}
|
|
|
|
@Test
|
|
void given_storedGame_when_findGameById_should_returnGame()
|
|
{
|
|
final GameRepository repository = when(mock(GameRepository.class).findByGameId(any(GameId.class)))
|
|
.thenReturn(new Game(null, null, null, null, null, null))
|
|
.getMock();
|
|
|
|
final Game result = new GameService(repository).findGameById(GameId.of("12345"));
|
|
|
|
assertNotNull(result);
|
|
}
|
|
|
|
@Test
|
|
void given_storedGames_when_findGamesOfUser_should_returnSetOfGames()
|
|
{
|
|
final GameRepository repository = when(mock(GameRepository.class).findRunningGamesOfPlayer(any(UserId.class)))
|
|
.thenReturn(List.of(
|
|
new Game(GameId.random(), UserId.of("12345"), UserId.random(), null, null, null),
|
|
new Game(GameId.random(), UserId.random(), UserId.of("12345"), null, null, null)))
|
|
.getMock();
|
|
|
|
final List<Game> result = new GameService(repository).findRunningGamesOfUser(UserId.of("12345"));
|
|
|
|
assertEquals(2, result.size());
|
|
}
|
|
}
|