Files
Agent-System/web/src/lib/projectMemberAdapter.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

41 lines
1.3 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
fromApiProjectRole,
mapApiMemberToProjectMember,
toApiProjectRole,
} from './projectMemberAdapter';
test('toApiProjectRole maps doc roles to member and creator to owner', () => {
assert.equal(toApiProjectRole('creator', 1, 1), 'owner');
assert.equal(toApiProjectRole('author', 2, 1), 'member');
assert.equal(toApiProjectRole('reviewer', 2, 1), 'member');
assert.equal(toApiProjectRole('viewer', 2, 1), 'viewer');
});
test('fromApiProjectRole maps owner to creator for project creator', () => {
assert.equal(fromApiProjectRole('owner', 1, 1), 'creator');
assert.equal(fromApiProjectRole('owner', 2, 1), 'owner');
assert.equal(fromApiProjectRole('member', 3, 1), 'member');
assert.equal(fromApiProjectRole('viewer', 4, 1), 'viewer');
});
test('mapApiMemberToProjectMember builds UI record', () => {
const mapped = mapApiMemberToProjectMember(
{
user_id: 2,
name: '张工',
username: 'zhang',
project_role: 'member',
document_duty: 'reviewer',
status: 'active',
joined_at: '2026-09-12 10:00:00',
},
1
);
assert.equal(mapped.userId, 2);
assert.equal(mapped.userName, '张工');
assert.equal(mapped.role, 'reviewer');
assert.equal(mapped.status, 'active');
});