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

32 lines
1.6 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { SYS_G, applyTend } from './secretary-gardener.mjs';
describe('secretary-gardener', () => {
it('SYS_G требует proof на close', () => {
expect(SYS_G).toMatch(/proof/);
expect(SYS_G).toMatch(/ЗАЯВЛЕНИЕ ≠ ПРУФ/);
});
it('close с пруфом — закрыто', () => {
const proto = { hidden: [{ id: 'СВ-1', status: 'открыт' }] };
applyTend(proto, [{ id: 'СВ-1', action: 'close', proof: 'код mentor.mjs:107' }], 15);
expect(proto.hidden[0].status).toBe('закрыт');
expect(proto.hidden[0].struck).toBe(true);
});
it('голое close без proof — понижено в carry (В1-гейт)', () => {
const proto = { hidden: [{ id: 'СВ-1', status: 'открыт' }] };
applyTend(proto, [{ id: 'СВ-1', action: 'close', proof: '' }], 15);
expect(proto.hidden[0].status).toBe('открыт');
});
it('narrow меняет текст и статус', () => {
const proto = { hidden: [{ id: 'СВ-2', status: 'открыт', text: 'старый' }] };
applyTend(proto, [{ id: 'СВ-2', action: 'narrow', newText: 'остаток' }], 15);
expect(proto.hidden[0].status).toBe('сужен');
expect(proto.hidden[0].text).toBe('остаток');
});
it('close по горящему ХВ-1 закрывает хвост', () => {
const proto = { hidden: [], tails: [{ text: 'хвост', done: false }] };
applyTend(proto, [{ id: 'ХВ-1', action: 'close', proof: 'убрано' }], 15);
expect(proto.tails[0].done).toBe(true);
});
});