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>
112 lines
2.9 KiB
TypeScript
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',
|
|
);
|
|
});
|
|
});
|