Files
brain/tools/secretary-apply.test.mjs
T

38 lines
2.1 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { applyResults } from './secretary-apply.mjs';
describe('applyResults', () => {
const base = () => ({ hidden: [], nextSvId: 1, candidates: [] });
it('новая ветка из диагностики получает id+паспорт; догадка+блокер→важное', () => {
const p = applyResults(base(), 13, { new: [{ text: 'x', lens: 'Л4', опора: 'догадка', тяжесть: 'блокер' }] }, { dropped: [] }, { forks: [] }, { tend: [] });
expect(p.hidden[0].id).toBe('СВ-1');
expect(p.hidden[0].опора).toBe('догадка');
expect(p.hidden[0].тяжесть).toBe('важное'); // зажим: догадка не блокер
});
it('брошенное ловцом → ветка lens=брош', () => {
const p = applyResults(base(), 13, { new: [] }, { dropped: [{ text: 'parked', цитата: 'q' }] }, { forks: [] }, { tend: [] });
expect(p.hidden[0].lens).toBe('брош');
});
it('кандидаты накапливаются (ход рождения), без дублей', () => {
let p = applyResults(base(), 13, { new: [] }, { dropped: [] }, { forks: [{ branch: 'idea-1' }] }, { tend: [] });
p = applyResults(p, 15, { new: [] }, { dropped: [] }, { forks: [{ branch: 'idea-1' }, { branch: 'idea-2' }] }, { tend: [] });
expect(p.candidates.map((c) => c.branch)).toEqual(['idea-1', 'idea-2']);
expect(p.candidates.find((c) => c.branch === 'idea-1').born).toBe(13);
});
it('садовник закрывает ветку через применение', () => {
const proto = { hidden: [{ id: 'СВ-1', status: 'открыт' }], nextSvId: 2, candidates: [] };
const p = applyResults(proto, 15, { new: [] }, { dropped: [] }, { forks: [] }, { tend: [{ id: 'СВ-1', action: 'close', proof: 'есть' }] });
expect(p.hidden[0].status).toBe('закрыт');
});
it('вход не мутируется', () => {
const proto = base();
applyResults(proto, 13, { new: [{ text: 'x', lens: 'Л1' }] }, { dropped: [] }, { forks: [] }, { tend: [] });
expect(proto.hidden).toHaveLength(0);
});
});