modaq
Version:
Quiz Bowl Reader using TypeScript, React, and MobX
194 lines • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const AppState_1 = require("src/state/AppState");
require("src/state/Cycle");
const GameState_1 = require("src/state/GameState");
const PacketState_1 = require("src/state/PacketState");
const TeamState_1 = require("src/state/TeamState");
const defaultPacket = new PacketState_1.PacketState();
defaultPacket.setTossups([
new PacketState_1.Tossup("first q", "first a"),
new PacketState_1.Tossup("second q", "second a"),
new PacketState_1.Tossup("thrid q", "third a"),
new PacketState_1.Tossup("fourth q", "fourth a"),
new PacketState_1.Tossup("fifth q", "fifth a"),
]);
const defaultTeamNames = ["Alpha", "Beta"];
const defaultExistingPlayers = [
new TeamState_1.Player("Alice", defaultTeamNames[0], true),
new TeamState_1.Player("Arthur", defaultTeamNames[0], false),
new TeamState_1.Player("Bob", defaultTeamNames[1], true),
new TeamState_1.Player("Betty", defaultTeamNames[1], false),
];
const defaultInactivePlayer = new TeamState_1.Player("Anna", defaultTeamNames[0], false);
function initializeApp() {
const gameState = new GameState_1.GameState();
gameState.loadPacket(defaultPacket);
gameState.addNewPlayers(defaultExistingPlayers);
AppState_1.AppState.resetInstance();
const appState = AppState_1.AppState.instance;
appState.game = gameState;
appState.game.addNewPlayer(defaultInactivePlayer);
return appState;
}
function assertPlayerJoin(cycle, player) {
const joinEvents = cycle.playerJoins;
if (joinEvents == undefined) {
chai_1.assert.fail("No join events found for this cycle");
}
chai_1.expect(joinEvents[0].inPlayer).to.equal(player);
}
describe("AddInactivePlayerTests", () => {
it("addInactivePlayer in first cycle", () => {
const appState = initializeApp();
appState.game.addInactivePlayer(defaultInactivePlayer, 0);
const firstPlayers = appState.game.getActivePlayers(defaultInactivePlayer.teamName, 0);
chai_1.expect(firstPlayers.has(defaultInactivePlayer)).to.be.true;
const lastPlayers = appState.game.getActivePlayers(defaultInactivePlayer.teamName, appState.game.cycles.length - 1);
chai_1.expect(lastPlayers.has(defaultInactivePlayer)).to.be.true;
});
it("addInactivePlayer in second cycle", () => {
const appState = initializeApp();
appState.game.addInactivePlayer(defaultInactivePlayer, 1);
const beforePlayers = appState.game.getActivePlayers(defaultInactivePlayer.teamName, 0);
chai_1.expect(beforePlayers.has(defaultInactivePlayer)).to.be.false;
const players = appState.game.getActivePlayers(defaultInactivePlayer.teamName, 1);
chai_1.expect(players.has(defaultInactivePlayer)).to.be.true;
});
it("addInactivePlayer after they've joined before does nothing", () => {
const appState = initializeApp();
appState.game.cycles[0].addPlayerJoins(defaultInactivePlayer);
appState.game.addInactivePlayer(defaultInactivePlayer, 1);
chai_1.expect(appState.game.cycles[1].playerJoins).to.be.undefined;
assertPlayerJoin(appState.game.cycles[0], defaultInactivePlayer);
});
it("addInactivePlayer before they've joined replaces joined event", () => {
const appState = initializeApp();
appState.game.cycles[2].addPlayerJoins(defaultInactivePlayer);
appState.game.addInactivePlayer(defaultInactivePlayer, 1);
chai_1.expect(appState.game.cycles[2].playerJoins).to.be.empty;
chai_1.expect(appState.game.cycles[2].playerLeaves).to.be.undefined;
chai_1.expect(appState.game.cycles[2].subs).to.be.undefined;
assertPlayerJoin(appState.game.cycles[1], defaultInactivePlayer);
});
it("addInactivePlayer after they've joined and left adds them back", () => {
const appState = initializeApp();
appState.game.cycles[0].addPlayerJoins(defaultInactivePlayer);
appState.game.cycles[1].addPlayerLeaves(defaultInactivePlayer);
appState.game.addInactivePlayer(defaultInactivePlayer, 2);
assertPlayerJoin(appState.game.cycles[0], defaultInactivePlayer);
assertPlayerJoin(appState.game.cycles[2], defaultInactivePlayer);
const firstCyclePlayers = appState.game.getActivePlayers(defaultInactivePlayer.teamName, 0);
chai_1.expect(firstCyclePlayers.has(defaultInactivePlayer)).to.be.true;
const secondCyclePlayers = appState.game.getActivePlayers(defaultInactivePlayer.teamName, 1);
chai_1.expect(secondCyclePlayers.has(defaultInactivePlayer)).to.be.false;
const thirdCyclePlayers = appState.game.getActivePlayers(defaultInactivePlayer.teamName, 2);
chai_1.expect(thirdCyclePlayers.has(defaultInactivePlayer)).to.be.true;
});
it("addInactivePlayer, leave after and then join after still adds the player", () => {
const appState = initializeApp();
const playerToLeave = defaultExistingPlayers[0];
appState.game.cycles[3].addPlayerJoins(playerToLeave);
appState.game.cycles[2].addPlayerLeaves(playerToLeave);
appState.game.addInactivePlayer(playerToLeave, 1);
assertPlayerJoin(appState.game.cycles[1], playerToLeave);
assertPlayerJoin(appState.game.cycles[3], playerToLeave);
const thirdCycleLeaveEvents = appState.game.cycles[2].playerLeaves;
if (thirdCycleLeaveEvents == undefined) {
chai_1.assert.fail("No leave events found for the third cycle");
}
chai_1.expect(thirdCycleLeaveEvents[0].outPlayer).to.equal(playerToLeave);
});
it("addInactivePlayer after leave adds the player", () => {
const appState = initializeApp();
const playerToLeave = defaultExistingPlayers[0];
appState.game.cycles[1].addPlayerLeaves(playerToLeave);
appState.game.addInactivePlayer(playerToLeave, 2);
assertPlayerJoin(appState.game.cycles[2], playerToLeave);
const secondCycleLeaveEvents = appState.game.cycles[1].playerLeaves;
if (secondCycleLeaveEvents == undefined) {
chai_1.assert.fail("No leave events found for the second cycle");
}
chai_1.expect(secondCycleLeaveEvents[0].outPlayer).to.equal(playerToLeave);
});
it("addInactivePlayer but player was already subbed in", () => {
const appState = initializeApp();
appState.game.cycles[1].addSwapSubstitution(defaultInactivePlayer, defaultExistingPlayers[0]);
appState.game.addInactivePlayer(defaultInactivePlayer, 3);
chai_1.expect(appState.game.cycles[3].playerJoins).to.be.undefined;
const secondCycleSubEvents = appState.game.cycles[1].subs;
if (secondCycleSubEvents == undefined) {
chai_1.assert.fail("No sub events found for the second cycle");
}
chai_1.expect(secondCycleSubEvents[0].inPlayer).to.equal(defaultInactivePlayer);
});
it("addInactivePlayer but player is subbed in later", () => {
const appState = initializeApp();
appState.game.cycles[3].addSwapSubstitution(defaultInactivePlayer, defaultExistingPlayers[0]);
appState.game.addInactivePlayer(defaultInactivePlayer, 1);
assertPlayerJoin(appState.game.cycles[1], defaultInactivePlayer);
const fourthCycleSubEvents = appState.game.cycles[3].subs;
if (fourthCycleSubEvents == undefined) {
chai_1.assert.fail("No sub events found for the fourth cycle");
}
chai_1.expect(fourthCycleSubEvents.length).to.equal(1);
});
it("addInactivePlayer, player subbed in but then left", () => {
const appState = initializeApp();
const player = defaultExistingPlayers[0];
appState.game.cycles[1].addSwapSubstitution(defaultInactivePlayer, player);
appState.game.addInactivePlayer(player, 3);
assertPlayerJoin(appState.game.cycles[3], player);
const secondCycleSubEvents = appState.game.cycles[1].subs;
if (secondCycleSubEvents == undefined) {
chai_1.assert.fail("No sub events found for the second cycle");
}
chai_1.expect(secondCycleSubEvents[0].inPlayer).to.equal(defaultInactivePlayer);
chai_1.expect(secondCycleSubEvents[0].outPlayer).to.equal(player);
});
it("addInactivePlayer subbed in after they leave", () => {
const appState = initializeApp();
appState.game.cycles[3].addSwapSubstitution(defaultInactivePlayer, defaultExistingPlayers[0]);
appState.game.cycles[2].addPlayerLeaves(defaultInactivePlayer);
appState.game.addInactivePlayer(defaultInactivePlayer, 1);
assertPlayerJoin(appState.game.cycles[1], defaultInactivePlayer);
const secondCycleSubEvents = appState.game.cycles[3].subs;
if (secondCycleSubEvents == undefined) {
chai_1.assert.fail("No sub events found for the second cycle");
}
chai_1.expect(secondCycleSubEvents[0].inPlayer).to.equal(defaultInactivePlayer);
});
it("addInactivePlayer after they were subbed out", () => {
const appState = initializeApp();
appState.game.cycles[3].addSwapSubstitution(defaultInactivePlayer, defaultExistingPlayers[0]);
appState.game.cycles[2].addPlayerLeaves(defaultInactivePlayer);
appState.game.addInactivePlayer(defaultInactivePlayer, 1);
assertPlayerJoin(appState.game.cycles[1], defaultInactivePlayer);
const secondCycleSubEvents = appState.game.cycles[3].subs;
if (secondCycleSubEvents == undefined) {
chai_1.assert.fail("No sub events found for the second cycle");
}
chai_1.expect(secondCycleSubEvents[0].inPlayer).to.equal(defaultInactivePlayer);
});
it("addInactivePlayer in second cycle with different team", () => {
const appState = initializeApp();
const newPlayer = new TeamState_1.Player("Bill", defaultTeamNames[1], false);
appState.game.addNewPlayer(newPlayer);
appState.game.addInactivePlayer(newPlayer, 1);
const beforePlayers = appState.game.getActivePlayers(newPlayer.teamName, 0);
chai_1.expect(beforePlayers.has(newPlayer)).to.be.false;
const players = appState.game.getActivePlayers(newPlayer.teamName, 1);
chai_1.expect(players.has(newPlayer)).to.be.true;
});
it("addInactivePlayer with same name from different team", () => {
const appState = initializeApp();
const newPlayer = new TeamState_1.Player(defaultInactivePlayer.name, defaultTeamNames[1], false);
appState.game.addNewPlayer(newPlayer);
appState.game.addInactivePlayer(newPlayer, 0);
const players = appState.game.getActivePlayers(newPlayer.teamName, 0);
chai_1.expect(players.has(defaultInactivePlayer)).to.be.false;
chai_1.expect(players.has(newPlayer)).to.be.true;
});
});
//# sourceMappingURL=AddInactivePlayerTests.js.map