等待后端更新接口

This commit is contained in:
2026-08-03 16:49:26 +08:00
parent ac5823547a
commit 5b79893650
131 changed files with 5324 additions and 1392 deletions
+20 -2
View File
@@ -70,6 +70,7 @@ test('成员修改只构造后端可更新字段并收紧角色枚举', () => {
roleType: 'editor',
lineagePersonId: '2060000000000000004'
});
assert.deepEqual(buildMemberUpdateBody({ relationName: ' ' }), {});
assert.equal(validateMemberUpdateBody(buildMemberUpdateBody({ memberName: '名'.repeat(51) })), '成员名称不能超过 50 个字符');
assert.equal(validateMemberUpdateBody(buildMemberUpdateBody({ relationName: '关系'.repeat(51) })), '关系名称不能超过 100 个字符');
assert.throws(
@@ -96,8 +97,10 @@ test('成员管理动作遵守谱主和管理员的后端权限边界', () => {
assert.equal(canRemoveMember('admin', 'admin'), false);
assert.equal(canLeaveGenealogy('owner'), false);
assert.equal(canLeaveGenealogy('member'), true);
assert.equal(canTransferOwner('owner'), true);
assert.equal(canTransferOwner('admin'), false);
assert.equal(canTransferOwner('owner', true), true);
assert.equal(canTransferOwner('owner', false), false);
assert.equal(canTransferOwner('owner', 'true'), false);
assert.equal(canTransferOwner('admin', true), false);
});
test('谱主转移只使用成员列表中的真实目标 memberId', () => {
@@ -160,17 +163,32 @@ test('成员列表展示转义内容并隐藏手机号与内部 ID', () => {
test('家族管理页开放成员维护、退出和谱主转移且不允许手填 ID', () => {
const page = fs.readFileSync(path.join(__dirname, '..', 'profile-family-admin.html'), 'utf8');
const script = fs.readFileSync(modulePath, 'utf8');
assert.doesNotMatch(page, /data-feature-status="pending"|pending-pages\.js/);
assert.match(page, /public\/js\/member-admin-pages\.js/);
assert.match(page, /data-member-list/);
assert.match(page, /data-member-form/);
assert.match(page, /data-member-form novalidate/);
assert.match(page, /name="memberName"/);
assert.match(page, /name="relationName"/);
assert.match(page, /name="roleType"/);
assert.match(page, /select[^>]+name="lineagePersonId"|name="lineagePersonId"[^>]+select/);
assert.match(page, /data-member-leave/);
assert.match(page, /data-member-action-status/);
assert.match(page, /select[^>]+name="targetMemberId"|name="targetMemberId"[^>]+select/);
assert.match(page, /data-owner-transfer-form novalidate/);
assert.match(page, /name="targetMemberId"[^>]+required/);
assert.match(page, /data-member-form-status/);
assert.match(page, /空值清除语义/);
assert.match(page, /data-owner-transfer-status/);
assert.doesNotMatch(page, /name="(?:memberId|appUserId)"|type="(?:text|number)"[^>]+name="(?:lineagePersonId|targetMemberId)"/);
assert.doesNotMatch(page, /href="profile-data\.html"[^>]*>\s*添加成员/);
assert.match(script, /function setMemberListState\(type, message\)/);
assert.match(script, /root\.ProfileUI && root\.ProfileUI\.setApiState/);
assert.match(script, /setMemberListState\('loading', '正在加载成员…'\)/);
assert.match(script, /setStatus\('\[data-member-form-status\]', '正在保存成员…', 'loading'\)/);
assert.match(script, /setStatus\('\[data-owner-transfer-status\]', '正在转让谱主…', 'loading'\)/);
assert.match(script, /setStatus\('\[data-member-action-status\]', '正在移出成员…', 'loading'\)/);
assert.match(script, /canTransferOwner\(actorRole, managementAccess\)/);
});