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.

114 lines
4.0 KiB

package de.fd.fh.server.game;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import de.fd.fh.server.user.UserId;
import dev.morphia.Datastore;
import dev.morphia.Key;
import dev.morphia.Morphia;
import dev.morphia.mapping.MappedClass;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class GameRepositoryTest
{
public static final String DB_NAME = "db_for_morphia";
private static MongoClient mongo;
private static MongoDatabase db;
private static Datastore ds;
private static final Morphia morphia = new Morphia();
private static GameRepository repository;
// @BeforeAll
public static void beforeClass() {
mongo = new MongoClient();
db = mongo.getDatabase(DB_NAME);
ds = morphia.createDatastore(mongo, db.getName());
repository = new GameRepository(ds);
}
// @AfterAll
public static void afterClass() {
cleanup();
mongo.close();
}
private static void cleanup() {
for (final MappedClass mc : morphia.getMapper().getMappedClasses()) {
db.getCollection(mc.getCollectionName()).drop();
}
}
// @Test
void saveTest()
{
final Set<Field> fields = new HashSet<>();
fields.add(new Field(0, 0, Field.Color.BLACK, new Figure(Figure.Type.BISHOP, UserId.of("12345"))));
fields.add(new Field(0, 2, Field.Color.WHITE, new Figure(Figure.Type.BISHOP, UserId.of("98765"))));
final Game game = new Game(GameId.random(), UserId.of("12345"), UserId.of("98765"), UserId.of("12345"), fields, UserId.of("12345"));
final Key<Game> key = repository.save(game);
assertEquals(Game.class, key.getType());
final Game result = ds.find(key.getType()).filter("id", key.getId()).first();
assertNotNull(result);
assertEquals("12345", result.getWhitePlayer().getIdentifier());
assertEquals("12345", result.getCurrentPlayer().getIdentifier());
assertEquals("98765", result.getBlackPlayer().getIdentifier());
assertEquals("12345", result.getWinner().getIdentifier());
assertNotNull(result.getId());
assertEquals(2, result.getFields().size());
}
// @Test
void findByGameIdTest()
{
final Set<Field> fields = new HashSet<>();
fields.add(new Field(0, 0, Field.Color.BLACK, new Figure(Figure.Type.BISHOP, UserId.of("12345"))));
fields.add(new Field(0, 2, Field.Color.WHITE, new Figure(Figure.Type.BISHOP, UserId.of("98765"))));
final Game game = new Game(GameId.of("4242"), UserId.of("12345"), UserId.of("98765"), UserId.of("12345"), fields, UserId.of("12345"));
ds.save(game);
final Game result = repository.findByGameId(GameId.of("4242"));
assertNotNull(result);
assertEquals("12345", result.getWhitePlayer().getIdentifier());
assertEquals("12345", result.getCurrentPlayer().getIdentifier());
assertEquals("98765", result.getBlackPlayer().getIdentifier());
assertEquals("12345", result.getWinner().getIdentifier());
assertNotNull(result.getId());
assertEquals(2, result.getFields().size());
}
// @Test
void getRunningGamesOfPlayerTest()
{
final Set<Field> fields = new HashSet<>();
fields.add(new Field(0, 0, Field.Color.BLACK, new Figure(Figure.Type.BISHOP, UserId.of("12345"))));
fields.add(new Field(0, 2, Field.Color.WHITE, new Figure(Figure.Type.BISHOP, UserId.of("98765"))));
final Game game = new Game(GameId.of("4242"), UserId.of("12345"), UserId.of("98765"), UserId.of("12345"), fields, null);
ds.save(game);
final List<Game> result = repository.findRunningGamesOfPlayer(UserId.of("98765"));
assertNotNull(result);
assertEquals(1, result.size());
}
}