38 lines
2.1 KiB
JavaScript
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);
|
|
});
|
|
});
|