Files
Agent-System/web/src/lib/currentDocRole.test.ts
T
weichenandCursor c1bdfe3920 feat(web): persist exclusive reviewer duty on project create
Keep project_role as member/viewer, send document_duty=reviewer for USER_B, and clear the seed 李主管 reviewer so the assigned reviewer is the one that syncs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-13 21:57:53 +00:00

112 lines
2.9 KiB
TypeScript

import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { resolveCurrentDocRole } from './currentDocRole';
const authorA = { id: 9, name: '编制人A' };
const reviewerB = { id: 2, name: '审核人B' };
const stranger = { id: 99, name: '陌生用户' };
const duties = {
authorId: 9,
author: '编制人A',
reviewerId: 2,
reviewer: '审核人B',
approverId: 3,
approver: '批准人C',
};
describe('resolveCurrentDocRole', () => {
it('resolves A as author by authoritative user id', () => {
assert.equal(resolveCurrentDocRole({ currentUser: authorA, ...duties }), 'author');
});
it('does not promote reviewer B or stranger to author', () => {
assert.equal(resolveCurrentDocRole({ currentUser: reviewerB, ...duties }), 'reviewer');
assert.equal(resolveCurrentDocRole({ currentUser: stranger, ...duties }), 'viewer');
});
it('resolves real USER_B id as reviewer and never name-promotes placeholder 2', () => {
const userB = { id: 171, name: '审核人B' };
assert.equal(
resolveCurrentDocRole({
currentUser: userB,
authorId: 170,
reviewerId: 171,
approverId: 4,
governanceMode: 'controlled',
}),
'reviewer',
);
assert.equal(
resolveCurrentDocRole({
currentUser: userB,
authorId: 170,
reviewerId: 2,
reviewer: '审核人B',
governanceMode: 'controlled',
}),
'viewer',
);
});
it('fail-closes unknown identity to viewer even if projectPermission says author', () => {
assert.equal(
resolveCurrentDocRole({
currentUser: stranger,
...duties,
projectPermission: 'author',
}),
'viewer',
);
});
it('matches name only for legacy local docs without duty ids', () => {
assert.equal(
resolveCurrentDocRole({
currentUser: { id: 1, name: '张工' },
author: '张工',
reviewer: '李主管',
approver: '王总监',
isLegacyLocalDoc: true,
}),
'author',
);
assert.equal(
resolveCurrentDocRole({
currentUser: stranger,
author: '张工',
reviewer: '李主管',
approver: '王总监',
isLegacyLocalDoc: true,
}),
'viewer',
);
});
it('does not name-promote when server controlled duties are zero ids', () => {
assert.equal(
resolveCurrentDocRole({
currentUser: { id: 99, name: '编制人A' },
authorId: 0,
reviewerId: 0,
approverId: 0,
author: '编制人A',
reviewer: '审核人B',
approver: '批准人C',
dutiesAuthoritative: true,
governanceMode: 'controlled',
isLegacyLocalDoc: true,
}),
'viewer',
);
assert.equal(
resolveCurrentDocRole({
currentUser: { id: 99, name: '编制人A' },
author: '编制人A',
governanceMode: 'controlled',
}),
'viewer',
);
});
});