package com.antonytrupe.server.tend;
import static org.junit.Assert.assertEquals;
import org.junit.Ignore;
import org.junit.Test;
import org.mozilla.javascript.ScriptableObject;
import com.antonytrupe.server.GAETestCase;
import com.antonytrupe.server.games.GameEngine;
import com.antonytrupe.server.games.GameEngineException;
public class APITest extends GAETestCase {
@Test
public void newBoard() throws GameEngineException {
API api = new API();
ScriptableObject board = api.createBoard();
assertEquals(32, board.get("size"));
}
@Test
@Ignore
public void stringify() throws GameEngineException {
API api = new API();
ScriptableObject board = api.save(api.createBoard());
assertEquals(1L, board.get("id"));
Object result = api.stringify(board);
assertEquals("", result);
}
@Test
public void saveBoard() throws GameEngineException {
API api = new API();
ScriptableObject board = api.createBoard();
assertEquals(32, board.get("size"));
ScriptableObject s = api.save(board);
assertEquals(1L, s.get("id"));
}
@Test
public void loadBoard() throws GameEngineException {
API api = new API();
ScriptableObject board1 = api.createBoard();
assertEquals(32, board1.get("size"));
board1 = api.save(board1);
assertEquals(1L, board1.get("id"));
ScriptableObject board2 = api.getBoard(1);
assertEquals(1, board2.get("id"));
}
@Test
public void update() throws GameEngineException {
API api = new API();
ScriptableObject board = api.createBoard();
assertEquals(32, board.get("size"));
assertEquals(null, board.get("id"));
GameEngine ge = new GameEngine(new String[] {
"/com/antonytrupe/tend/Resource.js",
"/com/antonytrupe/tend/ResourceGroup.js",
"/com/antonytrupe/tend/Point.js",
"/com/antonytrupe/tend/Board.js",
"/com/antonytrupe/tend/Player.js",
"/com/antonytrupe/tend/Trade.js",
"/com/antonytrupe/tend/Settlement.js" });
ge.invoke(board, "update", new String[] { "{\"board\":"
+ "{\"id\":1,\"players\":{}}" + "}" });
assertEquals(1, board.get("id"));
}
@Test
public void joinBoard() throws GameEngineException {
API api = new API();
Long boardId = null;
String userName = "one";
ScriptableObject board1 = api.joinBoard(boardId, userName);
assertEquals(32, board1.get("size"));
board1 = api.save(board1);
assertEquals(1L, board1.get("id"));
ScriptableObject board2 = api.getBoard(1);
assertEquals(1, board2.get("id"));
assertEquals(1, ((ScriptableObject) board2.get("players")).size());
api.joinBoard(board2, userName);
assertEquals(1, ((ScriptableObject) board2.get("players")).size());
api.joinBoard(board2, "two");
assertEquals(2, ((ScriptableObject) board2.get("players")).size());
}
@Test
public void queueSettlement() throws GameEngineException {
API api = new API();
Long boardId = null;
String playerName = "one";
ScriptableObject board = api.joinBoard(boardId, playerName);
assertEquals(32, board.get("size"));
board = api.save(board);
String settlementPoint = "{\"r\":1,\"g\":1,\"b\":1}";
String resources = "{\"WHEAT\":1,\"FUR\":1,\"STONE\":1}";
String settlementName = "HAMLET";
api.queueSettlement(board, playerName, settlementPoint, settlementName,
resources);
// see if the location got saved
ScriptableObject queuedSettlements = (ScriptableObject) ((ScriptableObject) ((ScriptableObject) board
.get("players")).get(playerName)).get("queuedSettlements");
assertEquals(1, queuedSettlements.size());
assertEquals(settlementName, queuedSettlements.get(settlementPoint));
// see if the queued resources got saved
ScriptableObject queuedSettlementsResources = (ScriptableObject) ((ScriptableObject) ((ScriptableObject) board
.get("players")).get(playerName))
.get("queuedSettlementsResources");
assertEquals(1, queuedSettlementsResources.size());
assertEquals(1,
((ScriptableObject) queuedSettlementsResources
.get(settlementPoint)).get("WHEAT"));
assertEquals(1,
((ScriptableObject) queuedSettlementsResources
.get(settlementPoint)).get("FUR"));
assertEquals(1,
((ScriptableObject) queuedSettlementsResources
.get(settlementPoint)).get("STONE"));
// see if the queued resources got removed from the player
ScriptableObject player = (ScriptableObject) ((ScriptableObject) board
.get("players")).get(playerName);
assertEquals(3.0,
((ScriptableObject) player.get("resources")).get("WHEAT"));
assertEquals(2.0,
((ScriptableObject) player.get("resources")).get("FUR"));
assertEquals(3.0,
((ScriptableObject) player.get("resources")).get("STONE"));
}
@Test
@Ignore
public void processQueuedSettlement() throws GameEngineException {
API api = new API();
Long boardId = null;
String playerName = "one";
ScriptableObject board = api.joinBoard(boardId, playerName);
assertEquals(32, board.get("size"));
board = api.save(board);
String settlementPoint = "{\"r\":1,\"g\":1,\"b\":1}";
String resources = "{\"WHEAT\":1,\"FUR\":1,\"STONE\":1}";
String settlementName = "HAMLET";
api.queueSettlement(board, playerName, settlementPoint, settlementName,
resources);
api.endTurn(board);
// see if the queued location got cleared
ScriptableObject scriptableObject3 = (ScriptableObject) ((ScriptableObject) board
.get("players")).get(playerName);
ScriptableObject queuedSettlements = (ScriptableObject) scriptableObject3
.get("queuedSettlements");
assertEquals(0, queuedSettlements.size());
// see if the queued resources got cleared
ScriptableObject queuedSettlementsResources = (ScriptableObject) scriptableObject3
.get("queuedSettlementsResources");
assertEquals(0, queuedSettlementsResources.size());
// see if the settlement got built
// board.settlementLocations
assertEquals(1,
((ScriptableObject) board.get("settlementLocations")).size());
assertEquals(settlementName,
((ScriptableObject) board.get("settlementLocations"))
.get(settlementPoint));
// board.settlementOwnership
assertEquals(1,
((ScriptableObject) board.get("settlementOwnership")).size());
assertEquals(playerName,
((ScriptableObject) board.get("settlementOwnership"))
.get(settlementPoint));
// board.players[playerName].settlements
ScriptableObject scriptableObject2 = (ScriptableObject) scriptableObject3
.get("settlements");
assertEquals(1, scriptableObject2.size());
ScriptableObject scriptableObject = (ScriptableObject) scriptableObject2
.get(settlementPoint);
assertEquals(settlementName, scriptableObject.get("name"));
}
}