1
0

extend session with ID

This commit is contained in:
Adrian Wannenmacher 2026-02-15 00:50:56 +01:00
parent 384aaf2fe7
commit b2ab89a151
Signed by: tfld
GPG Key ID: 19D986ECB1E492D5
2 changed files with 73 additions and 2 deletions

View File

@ -4,6 +4,9 @@ import Game from "./game.js";
import { Team } from "./round.js";
export default class Session {
/** The ID of this session. */
id = null;
/** The amout of points at which individual games are won.
*
* Only applies to new games.
@ -115,14 +118,19 @@ export default class Session {
* 2. It can be stored using IndexedDB.
*/
toStruct() {
return {
let res = {
goal: this.#goal,
ourTeam: this.ourTeam,
theirTeam: this.theirTeam,
games: this.#games.map((g) => g.toStruct()),
currentGame:
this.#currentGame !== null ? this.#currentGame.toStruct() : null,
}
};
if (this.id !== null)
res.id = this.id;
return res;
}
/** Read in an object created by `Session.toStruct` */
@ -130,6 +138,12 @@ export default class Session {
if (typeof value !== "object")
throw new TypeError("struct must be an object");
if ("id" in value) {
if (typeof value.id !== "number")
throw new TypeError("if struct contains id, then it must be a number");
this.id = value.id;
}
if (typeof value.goal !== "number")
throw new TypError("struct must contain goal as number");
if (!Number.isInteger(value.goal) || value.goal < 1)

View File

@ -123,6 +123,7 @@ export default function() {
session.currentGame.currentRound.winner = Team.They;
session.anotherGame();
session.currentGame.currentRound.winner = Team.We;
session.id = 15;
session.ourTeam = "This is us!";
session.theirTeam = "This is them!";
let struct = session.toStruct();
@ -133,6 +134,7 @@ export default function() {
let unfinished = new Game(3);
unfinished.currentRound.winner = Team.We;
let expected = {
id: 15,
goal: 3,
ourTeam: "This is us!",
theirTeam: "This is them!",
@ -150,6 +152,8 @@ export default function() {
orig.theirTeam = "This is them!";
let copy = new Session(orig.toStruct());
assert.strictEqual(copy.id, orig.id, "IDs match");
assert.strictEqual(copy.id, null, "copy ID is null");
assert.strictEqual(copy.goal, orig.goal, "goals match");
assert.strictEqual(copy.ourTeam, orig.ourTeam, "our teams match");
assert.strictEqual(copy.theirTeam, orig.theirTeam, "their teams match");
@ -160,12 +164,15 @@ export default function() {
assert.deepEqual(copy.result, orig.result, "results match");
orig.anotherGame();
orig.id = 15;
orig.currentGame.currentRound.raise(Team.They);
orig.currentGame.currentRound.winner = Team.We;
orig.anotherGame();
orig.currentGame.currentRound.winner = Team.They;
copy = new Session(orig.toStruct());
assert.strictEqual(copy.id, orig.id, "IDs match");
assert.strictEqual(copy.id, 15, "copy ID is correct");
assert.strictEqual(copy.games.length, 1, "single past game");
assert.strictEqual(
copy.games.length, orig.games.length, "amount of past games");
@ -293,5 +300,55 @@ export default function() {
};
assert.deepEqual(session.toStruct(), expected, "reexport matches");
});
QUnit.test("fromStruct - v2 - new session", function(assert) {
let struct = {
id: 23,
goal: 3,
ourTeam: "",
theirTeam: "",
games: [],
currentGame: null,
};
let session = new Session(struct);
let expected = {
id: 23,
goal: 3,
ourTeam: "",
theirTeam: "",
games: [],
currentGame: null,
};
assert.deepEqual(session.toStruct(), expected, "reexport matches");
});
QUnit.test("fromStruct - v2 - finished & unfinished", function(assert) {
let finished = new Game(3);
finished.currentRound.raise(Team.We);
finished.currentRound.winner = Team.They;
let unfinished = new Game(3);
unfinished.currentRound.winner = Team.We;
let struct = {
id: 17,
goal: 3,
ourTeam: "This is us!",
theirTeam: "This is them!",
games: [ finished.toStruct() ],
currentGame: unfinished.toStruct(),
};
let session = new Session(struct);
let expected = {
id: 17,
goal: 3,
ourTeam: "This is us!",
theirTeam: "This is them!",
games: [ finished.toStruct() ],
currentGame: unfinished.toStruct(),
};
assert.deepEqual(session.toStruct(), expected, "reexport matches");
});
});
}