28 lines
1.6 KiB
JavaScript
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');
|
|
});
|