UNPKG

modaq

Version:

Quiz Bowl Reader using TypeScript, React, and MobX

147 lines 11.3 kB
"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