Files
stack/packages/bus/tests/origin-boundary-probes.test.mjs

28 lines
1.6 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { requestFixture } from './request-fixture.mjs';
function archiveOrigin(f) {
const state=f.journal.readRequest('demo',f.request);
const p=f.store.get('SELECT project FROM threads WHERE id=?',state.thread).project;
f.call('human','project.archive',{project:p});
return p;
}
test('origin archive must fence later PRD activation', async t=>{
const f=await requestFixture(t,'autonomous',null,true);
const sub=await f.submit(); f.approve(sub); archiveOrigin(f);
const before=f.journal.snapshotEvents('demo','timer').length;
let value=null,error=null;
try {value=await f.activate(sub);}catch(e){error=e.code;}
console.log('ORIGIN_ARCHIVE_ACTIVATION',JSON.stringify({error,snapshot:value?.id,phase:f.journal.readRequest('demo',f.request).phase}));
assert.equal(error,'project-archived');
assert.equal(value,null); assert.equal(f.journal.snapshotEvents('demo','timer').length,before);
assert.equal(f.journal.readRequest('demo',f.request).phase,'prd-review');
});
test('origin archive must fence task and requirement admission', async t=>{
const f=await requestFixture(t,'autonomous',null,true);
const sub=await f.submit();f.approve(sub);const snap=await f.activate(sub);archiveOrigin(f);
const args={request:f.request,project_key:'timer',requirement_snapshot:snap.id,op:'new-after-origin-archive',requirement:'REQ-POMO-1'};
assert.throws(() => f.bus.broker.taskCreateTarget(f.caps.pm,args), e => e.code === 'project-archived');
await assert.rejects(f.bus.broker.requirementsFor(f.caps.pm,args), e => e.code === 'project-archived');
});