// Тесты 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); }); });