Files
Agent-System/web/src/lib/commentPolicy.test.ts
T
weichen 986d78cc91 feat(docgov): complete review lifecycle gaps for lock/notify/comment/reopen
Defer locked-period supplements to a pending ledger, route duty-holder
notifications, persist stage-scoped comments, and prefer Approver for reopen.
2026-09-24 23:06:23 +00:00

38 lines
1.5 KiB
TypeScript

import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import {
canAddBlockComment,
canResolveComment,
resolveCommentAuthorRole,
} from './commentPolicy';
describe('commentPolicy', () => {
it('applies stage matrix for add', () => {
assert.equal(canAddBlockComment('author', 'drafting'), true);
assert.equal(canAddBlockComment('reviewer', 'drafting'), true);
assert.equal(canAddBlockComment('approver', 'drafting'), false);
assert.equal(canAddBlockComment('author', 'reviewing'), true);
assert.equal(canAddBlockComment('approver', 'reviewing'), false);
assert.equal(canAddBlockComment('approver', 'approving'), true);
assert.equal(canAddBlockComment('author', 'approving'), false);
assert.equal(canAddBlockComment('reviewer', 'approved'), false);
});
it('keeps viewer read-only', () => {
assert.equal(canAddBlockComment('viewer', 'drafting'), false);
assert.equal(resolveCommentAuthorRole('viewer'), null);
});
it('resolves author role literally', () => {
assert.equal(resolveCommentAuthorRole('author'), 'author');
assert.equal(resolveCommentAuthorRole('reviewer'), 'reviewer');
assert.equal(resolveCommentAuthorRole('approver'), 'approver');
});
it('gates resolve by stage', () => {
assert.equal(canResolveComment('author', 'drafting'), true);
assert.equal(canResolveComment('author', 'reviewing'), false);
assert.equal(canResolveComment('reviewer', 'reviewing'), true);
});
});