modaq
Version:
Quiz Bowl Reader using TypeScript, React, and MobX
147 lines • 11.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const chai_1 = require("chai");
const Cycle_1 = require("src/state/Cycle");
const TeamState_1 = require("src/state/TeamState");
const GameState_1 = require("src/state/GameState");
describe("GameStateTests", () => {
describe("getActivePlayers", () => {
const firstTeamName = "A";
const secondTeamName = "B";
const firstTeamStarter = new TeamState_1.Player("Alice", firstTeamName, /* isStarter */ true);
const anotherFirstTeamStarter = new TeamState_1.Player("Alan", firstTeamName, /* isStarter */ true);
const firstTeamSub = new TeamState_1.Player("Anna", firstTeamName, /* isStarter*/ false);
const secondTeamStarter = new TeamState_1.Player("Bob", secondTeamName, /* isStarter */ true);
const anotherSecondTeamStarter = new TeamState_1.Player("Bianca", secondTeamName, /* isStarter */ true);
const secondTeamSub = new TeamState_1.Player("Ben", secondTeamName, /* isStarter*/ false);
const allStarters = [
firstTeamStarter,
anotherFirstTeamStarter,
secondTeamStarter,
anotherSecondTeamStarter,
];
const allPlayers = allStarters.concat(firstTeamSub, secondTeamSub);
const firstTeamStarters = allStarters.filter((player) => player.teamName === firstTeamName);
const secondTeamStarters = allStarters.filter((player) => player.teamName === secondTeamName);
it("All starters no subs", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allStarters);
allPlayersInSet(game.getActivePlayers(firstTeamName, 0), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, 0), secondTeamStarters);
const lastCycleIndex = game.cycles.length - 1;
allPlayersInSet(game.getActivePlayers(firstTeamName, lastCycleIndex), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, lastCycleIndex), secondTeamStarters);
});
it("Some non-starters no subs", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allPlayers);
chai_1.expect(game.getPlayers(firstTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === firstTeamName));
chai_1.expect(game.getPlayers(secondTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === secondTeamName));
allPlayersInSet(game.getActivePlayers(firstTeamName, 0), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, 0), secondTeamStarters);
const lastCycleIndex = game.cycles.length - 1;
allPlayersInSet(game.getActivePlayers(firstTeamName, lastCycleIndex), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, lastCycleIndex), secondTeamStarters);
});
it("Some non-starters, all subbed", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allPlayers);
const lastCycleIndex = game.cycles.length - 1;
const subCycleIndex = 1;
game.cycles[subCycleIndex].addSwapSubstitution(firstTeamSub, firstTeamStarter);
game.cycles[subCycleIndex].addSwapSubstitution(secondTeamSub, secondTeamStarter);
chai_1.expect(game.getPlayers(firstTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === firstTeamName));
chai_1.expect(game.getPlayers(secondTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === secondTeamName));
allPlayersInSet(game.getActivePlayers(firstTeamName, 0), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, 0), secondTeamStarters);
const firstTeamAfterSub = [firstTeamSub, anotherFirstTeamStarter];
const secondTeamAfterSub = [secondTeamSub, anotherSecondTeamStarter];
allPlayersInSet(game.getActivePlayers(firstTeamName, subCycleIndex), firstTeamAfterSub);
allPlayersInSet(game.getActivePlayers(secondTeamName, subCycleIndex), secondTeamAfterSub);
allPlayersInSet(game.getActivePlayers(firstTeamName, lastCycleIndex), firstTeamAfterSub);
allPlayersInSet(game.getActivePlayers(secondTeamName, lastCycleIndex), secondTeamAfterSub);
});
it("New player joins", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allPlayers);
const lastCycleIndex = game.cycles.length - 1;
const joinCycleIndex = 1;
const newFirstTeamPlayer = new TeamState_1.Player("Antonio", firstTeamName, /* isStarter */ false);
const newSecondTeamPlayer = new TeamState_1.Player("Belle", secondTeamName, /* isStarter */ false);
game.addNewPlayers([newFirstTeamPlayer, newSecondTeamPlayer]);
game.cycles[joinCycleIndex].addPlayerJoins(newFirstTeamPlayer);
game.cycles[joinCycleIndex].addPlayerJoins(newSecondTeamPlayer);
chai_1.expect(game.getPlayers(firstTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === firstTeamName).concat(newFirstTeamPlayer));
chai_1.expect(game.getPlayers(secondTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === secondTeamName).concat(newSecondTeamPlayer));
allPlayersInSet(game.getActivePlayers(firstTeamName, 0), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, 0), secondTeamStarters);
const firstTeamAfterSub = firstTeamStarters.concat(newFirstTeamPlayer);
const secondTeamAfterSub = secondTeamStarters.concat(newSecondTeamPlayer);
allPlayersInSet(game.getActivePlayers(firstTeamName, joinCycleIndex), firstTeamAfterSub);
allPlayersInSet(game.getActivePlayers(secondTeamName, joinCycleIndex), secondTeamAfterSub);
allPlayersInSet(game.getActivePlayers(firstTeamName, lastCycleIndex), firstTeamAfterSub);
allPlayersInSet(game.getActivePlayers(secondTeamName, lastCycleIndex), secondTeamAfterSub);
});
it("Player leaves", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allPlayers);
const lastCycleIndex = game.cycles.length - 1;
const joinCycleIndex = 1;
game.cycles[joinCycleIndex].addPlayerLeaves(anotherFirstTeamStarter);
game.cycles[joinCycleIndex].addPlayerLeaves(anotherSecondTeamStarter);
chai_1.expect(game.getPlayers(firstTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === firstTeamName));
chai_1.expect(game.getPlayers(secondTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === secondTeamName));
allPlayersInSet(game.getActivePlayers(firstTeamName, 0), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, 0), secondTeamStarters);
const firstTeamAfterLeave = firstTeamStarters.filter((player) => player !== anotherFirstTeamStarter);
const secondTeamAfterLeave = secondTeamStarters.filter((player) => player !== anotherSecondTeamStarter);
allPlayersInSet(game.getActivePlayers(firstTeamName, joinCycleIndex), firstTeamAfterLeave);
allPlayersInSet(game.getActivePlayers(secondTeamName, joinCycleIndex), secondTeamAfterLeave);
allPlayersInSet(game.getActivePlayers(firstTeamName, lastCycleIndex), firstTeamAfterLeave);
allPlayersInSet(game.getActivePlayers(secondTeamName, lastCycleIndex), secondTeamAfterLeave);
});
it("Subbed in then subbed out", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allPlayers);
const lastCycleIndex = game.cycles.length - 1;
const subCycleIndex = lastCycleIndex - 1;
game.cycles[subCycleIndex].addSwapSubstitution(firstTeamSub, firstTeamStarter);
game.cycles[subCycleIndex].addSwapSubstitution(secondTeamSub, secondTeamStarter);
game.cycles[lastCycleIndex].addSwapSubstitution(firstTeamStarter, firstTeamSub);
game.cycles[lastCycleIndex].addSwapSubstitution(secondTeamStarter, secondTeamSub);
chai_1.expect(game.getPlayers(firstTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === firstTeamName));
chai_1.expect(game.getPlayers(secondTeamName)).to.deep.equal(allPlayers.filter((player) => player.teamName === secondTeamName));
allPlayersInSet(game.getActivePlayers(firstTeamName, 0), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, 0), secondTeamStarters);
const firstTeamAfterSub = [firstTeamSub, anotherFirstTeamStarter];
const secondTeamAfterSub = [secondTeamSub, anotherSecondTeamStarter];
allPlayersInSet(game.getActivePlayers(firstTeamName, subCycleIndex), firstTeamAfterSub);
allPlayersInSet(game.getActivePlayers(secondTeamName, subCycleIndex), secondTeamAfterSub);
allPlayersInSet(game.getActivePlayers(firstTeamName, lastCycleIndex), firstTeamStarters);
allPlayersInSet(game.getActivePlayers(secondTeamName, lastCycleIndex), secondTeamStarters);
});
it("Subbed in player in same position as subbed out", () => {
const game = new GameState_1.GameState();
game.setCycles([new Cycle_1.Cycle(), new Cycle_1.Cycle(), new Cycle_1.Cycle()]);
game.addNewPlayers(allPlayers);
game.cycles[1].addSwapSubstitution(firstTeamSub, firstTeamStarter);
const secondCycleActivePlayers = game.getActivePlayers(firstTeamName, 1);
chai_1.expect([...secondCycleActivePlayers]).to.deep.equal([firstTeamSub, anotherFirstTeamStarter]);
game.cycles[2].addSwapSubstitution(firstTeamStarter, anotherFirstTeamStarter);
const thirdCycleActivePlayers = game.getActivePlayers(firstTeamName, 2);
chai_1.expect([...thirdCycleActivePlayers]).to.deep.equal([firstTeamSub, firstTeamStarter]);
});
// Should have some strange ones, like same person leaving and joining. May be a reason to move away from type
// and move to implicit ordering (join before leave, swap in-between)
});
});
function allPlayersInSet(set, expectedPlayers) {
chai_1.expect(set).to.have.all.keys(expectedPlayers);
}
//# sourceMappingURL=GetActivePlayersTests.js.map