Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
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<State, Input> = { ...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 });
|
|
});
|
|
});
|