Files
brain/tools/secretary-render-archive.test.mjs
T

41 lines
2.3 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { renderArchive } from './secretary-render-archive.mjs';
describe('renderArchive — полный леджер', () => {
const base = (over) => ({ subject: '', decisions: [], will: [], open: [], consequences: [], doneNext: [], steps: [], hidden: [], candidates: [], ...over });
it('показывает мёртвых со статусом, причиной и историей (сырьё ТЗ)', () => {
const p = base({ hidden: [{ id: 'СВ-1', status: 'отпал', title: 'мёртвая', born: 1, endedTurn: 2, why: 'вытеснено',
history: [{ turn: 1, ev: 'рождён', why: 'диагност' }, { turn: 2, ev: 'отпал', why: 'вытеснено' }] }] });
const md = renderArchive(p);
expect(md).toMatch(/СВ-1/);
expect(md).toMatch(/отпал/);
expect(md).toMatch(/вытеснено/); // причина видна
expect(md).toMatch(/ход 1: рождён/); // история по шагам
});
it('живые и мёртвые вместе; родословная и наследник видны', () => {
const p = base({
hidden: [{ id: 'СВ-2', status: 'мутировал', title: 'старая форма', born: 1, endedTurn: 3, mutatedTo: 'СВ-3', why: 'заточил' }],
candidates: [{ id: 'КД-5', status: 'жив', title: 'живой кандидат', branch: 'b', born: 2, lineage: ['СВ-2'] }],
});
const md = renderArchive(p);
expect(md).toMatch(/СВ-2.*→ СВ-3/); // наследник
expect(md).toMatch(/КД-5/);
expect(md).toMatch(/родословная: СВ-2 → КД-5/);
});
it('пустой протокол не падает', () => {
expect(renderArchive(base())).toContain('ПОЛНЫЙ ЛЕДЖЕР');
});
});
describe('renderArchive — база знаний', () => {
const base2 = (over) => ({ subject: '', decisions: [], will: [], open: [], consequences: [], doneNext: [], steps: [], hidden: [], candidates: [], ...over });
it('печатает раздел со строкой знание — источник', () => {
const md = renderArchive(base2({ knowledge: [{ ref: 'f.mjs:10', text: 'факт' }] }));
expect(md).toContain('## База знаний');
expect(md).toContain('факт — f.mjs:10');
});
});