import test from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import { loadModule } from './load.mjs' const { ROLES, FLOORS, SEARCH_ROOMS, FLOOR_TITLES, ROOM_TITLES, MODEL_IDS, hatForModel, hatForWorker, roleOf } = await loadModule('src/lib/workersRoster.js') const fixture = JSON.parse(readFileSync(new URL('../fixtures/workers-roster.json', import.meta.url), 'utf8')) test('Spiegel ist gleich der gemeinsamen Fixture', () => { assert.deepEqual([...FLOORS], fixture.floors) assert.deepEqual(JSON.parse(JSON.stringify(ROLES)), fixture.roles) }) test('19 Worker, workerId und Raum einmalig, Etagen und Titel vollständig', () => { assert.equal(ROLES.length, 19) assert.equal(new Set(ROLES.map((r) => r.workerId)).size, 19) assert.equal(new Set(ROLES.map((r) => r.room)).size, 19) for (const r of ROLES) assert.ok(FLOORS.includes(r.floor), r.workerId) assert.equal(FLOORS.length, 10) assert.deepEqual(Object.keys(FLOOR_TITLES).sort(), [...FLOORS].sort()) assert.deepEqual(Object.keys(ROOM_TITLES).sort(), [...ROLES.map((r) => r.room), 'pult', 'tresor'].sort()) }) test('Hut zeigt das Modell, Otto trägt die Kommandomütze', () => { assert.deepEqual(['opus', 'claude-sonnet-5-5', 'claude-haiku-5-5', 'claude-xyz', undefined].map(hatForModel), ['opus', 'sonnet', 'haiku', 'haiku', 'haiku']) assert.deepEqual(['otto', 'bob', 'bea', 'kim', 'zed'].map(hatForWorker), ['overseer', 'opus', 'sonnet', 'haiku', 'haiku']) assert.equal(roleOf('paul').room, 'pruefung') assert.equal(roleOf('zed'), null) assert.equal(roleOf('constructor'), null) assert.equal(hatForWorker('__proto__'), 'haiku') assert.deepEqual(MODEL_IDS, { opus: 'claude-opus-5-5', sonnet: 'claude-sonnet-5-5', haiku: 'claude-haiku-5-5' }) }) test('SEARCH_ROOMS: festgenagelt wie im Dienst (P1-T05) und aus der Fixture ableitbar; nur diese Worker können grau sein (P1-E9)', () => { assert.deepEqual([...SEARCH_ROOMS], ['netz', 'kleinanzeigen', 'portale', 'foren', 'aerzte', 'handwerk', 'selbst', 'laden']) assert.deepEqual([...SEARCH_ROOMS], fixture.roles.filter((r) => ['anfragen', 'ohne_website'].includes(r.floor)).map((r) => r.room)) assert.deepEqual(ROLES.filter((r) => SEARCH_ROOMS.includes(r.room)).map((r) => r.workerId), ['rita', 'kim', 'pia', 'finn', 'ali', 'hanna', 'sven', 'lea']) assert.equal(ROLES.filter((r) => !SEARCH_ROOMS.includes(r.room)).length, 11) })