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('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', ); }); });