import { mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { game, type Input, type State } from '../../src/lib/game'; import type { GameSpec } from '../../src/lib/game/spec'; import { Rooms } from './rooms'; import { Store } from './store'; import { Tallies } from './tally'; let dir: string; beforeEach(() => { dir = mkdtempSync(join(tmpdir(), 'tally-')); }); afterEach(() => { rmSync(dir, { recursive: true, force: true }); }); describe('the tally', () => { it("adds a game's own lines from every game begun, finished or not", () => { const counted: GameSpec = { ...game, tallyBegun: () => ({ 'games of Wyrm begun': 1 }) }; const rooms = new Rooms(counted, new Store(dir)); for (let i = 0; i < 2; i++) { const host = rooms.create('Ann', 2); rooms.addBot(host.room, host.token); rooms.begin(host.room, host.token); } rooms.create('Bo', 2); const t = new Tallies(counted, new Store(dir)).get(); expect(t).toMatchObject({ tablesOpened: 3, gamesBegun: 2, gamesFinished: 0 }); expect(t.byGame).toEqual({ 'games of Wyrm begun': 2 }); }); });