Files
brain/tools/loop-termination.test.mjs
T

25 lines
1.3 KiB
JavaScript

// Тесты sub-plan E Task 5 — терминация внешней петли (§4 SE-R7-6 спеки R6.3).
import { describe, it, expect } from 'vitest';
import { loopTerminationDecision } from './loop-termination.mjs';
describe('loopTerminationDecision (SE-R7-6)', () => {
it('владелец объявил цель достигнутой → terminate', () => {
expect(loopTerminationDecision({ ownerDeclaredDone: true }).terminate).toBe(true);
});
it('судья gate-3 GO → terminate', () => {
expect(loopTerminationDecision({ judgeGate3Go: true }).terminate).toBe(true);
});
it('ни того ни другого → продолжать (контроллер сам не закрывает)', () => {
const r = loopTerminationDecision({});
expect(r.terminate).toBe(false);
expect(r.reason).toMatch(/контроллер сам не закрывает/);
});
it('оба → terminate', () => {
expect(loopTerminationDecision({ ownerDeclaredDone: true, judgeGate3Go: true }).terminate).toBe(true);
});
it('truthy-не-true НЕ закрывает (строгий ===true, fail-safe)', () => {
expect(loopTerminationDecision({ ownerDeclaredDone: 'yes' }).terminate).toBe(false);
expect(loopTerminationDecision({ judgeGate3Go: 1 }).terminate).toBe(false);
});
});