import test from 'node:test'; import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { activateGreenNodePreset, type GreenNodePreset } from './board-green-presets.ts'; const summary = JSON.parse(readFileSync(new URL('../data/boards-summary.json', import.meta.url), 'utf8')); const expected: Record = { 3: ['G-001', 'G-002', 'G-005'], 5: ['G-001', 'G-002', 'G-003', 'G-004', 'G-005'], 7: ['G-001', 'G-002', 'G-003', 'G-004', 'G-005', 'G-006', 'G-007'] }; for (const count of [3, 5, 7] as const) { test(`${count}칸은 모든 멤버의 지정 초록 노드만 활성화한다`, () => { const result = activateGreenNodePreset({}, summary.members, summary.models, count); assert.equal(Object.keys(result).length, summary.members.length); for (const member of summary.members) { assert.deepEqual(result[member.id].toSorted(), expected[count], member.id); } }); } test('7칸 적용 후 3칸·5칸을 반복 적용해도 기존 활성 상태를 보존하며 원본을 변경하지 않는다', () => { const memberId = summary.members[0].id; const original = { [memberId]: ['B-001', 'Y-001', 'G-001', 'G-008'], other: ['R-001'] }; const snapshot = structuredClone(original); const seven = activateGreenNodePreset(original, summary.members, summary.models, 7); const three = activateGreenNodePreset(seven, summary.members, summary.models, 3); const five = activateGreenNodePreset(three, summary.members, summary.models, 5); assert.deepEqual(original, snapshot); assert.deepEqual(five, seven); assert.deepEqual(five[memberId].toSorted(), ['B-001', ...expected[7], 'G-008', 'Y-001']); assert.deepEqual(five.other, ['R-001']); }); test('선택 좌표에 다른 색 노드가 있으면 활성화하지 않는다', () => { const models = { model: [{ groupId: 'B-001', x: 0, y: -1 }, { groupId: 'Y-001', x: -1, y: -2 }] }; assert.deepEqual(activateGreenNodePreset({}, [{ id: 'a', positionGroupId: 'model' }], models, 7), { a: [] }); });