fix(data): 清理旧数据并保护服务端写入
This commit is contained in:
@@ -11,7 +11,7 @@ import {
|
||||
resolveMemberDisplayName,
|
||||
isMemberReference,
|
||||
} from './member-system';
|
||||
import type { Member } from './members';
|
||||
import { ensureMemberUsernames, type Member } from './members';
|
||||
|
||||
const oldAdmin: Member = {
|
||||
id: SYSTEM_ADMIN_MEMBER_ID,
|
||||
@@ -31,6 +31,9 @@ test('normalizes the built-in admin account when old data named it as a regular
|
||||
assert.equal(result.members.length, 1);
|
||||
assert.equal(result.members[0].id, SYSTEM_ADMIN_MEMBER_ID);
|
||||
assert.equal(result.members[0].name, SYSTEM_ADMIN_MEMBER_NAME);
|
||||
assert.equal(result.members[0].username, 'admin');
|
||||
assert.equal(result.members[0].departmentId, '');
|
||||
assert.equal(result.members[0].email, '');
|
||||
assert.equal(result.members[0].roleId, SYSTEM_ADMIN_ROLE_ID);
|
||||
assert.equal(result.members[0].isSystem, true);
|
||||
assert.equal(result.members[0].phone, oldAdmin.phone);
|
||||
@@ -43,20 +46,48 @@ test('adds a built-in admin account when member data has none', () => {
|
||||
assert.equal(result.members.length, 1);
|
||||
assert.equal(result.members[0].id, SYSTEM_ADMIN_MEMBER_ID);
|
||||
assert.equal(result.members[0].name, SYSTEM_ADMIN_MEMBER_NAME);
|
||||
assert.equal(result.members[0].username, 'admin');
|
||||
assert.equal(result.members[0].departmentId, '');
|
||||
assert.equal(result.members[0].email, '');
|
||||
assert.equal(result.members[0].roleId, SYSTEM_ADMIN_ROLE_ID);
|
||||
});
|
||||
|
||||
test('keeps the built-in admin username when another cached member already uses admin', () => {
|
||||
const regularMember: Member = {
|
||||
id: 'm-1',
|
||||
name: '张三',
|
||||
username: 'admin',
|
||||
departmentId: 'dept-1',
|
||||
roleId: 'role-dev',
|
||||
phone: '',
|
||||
email: '',
|
||||
password: 'Ftb@2024',
|
||||
createdAt: '2024-01-01',
|
||||
};
|
||||
|
||||
const ensured = ensureSystemAdminMember([regularMember, oldAdmin]);
|
||||
const usernameEnsured = ensureMemberUsernames(ensured.members);
|
||||
|
||||
assert.equal(usernameEnsured.members[0].id, SYSTEM_ADMIN_MEMBER_ID);
|
||||
assert.equal(usernameEnsured.members[0].username, 'admin');
|
||||
assert.equal(usernameEnsured.members[1].username, 'admin1');
|
||||
});
|
||||
|
||||
test('protects the built-in admin account from identity and role edits', () => {
|
||||
const patch = sanitizeSystemAdminPatch(SYSTEM_ADMIN_MEMBER_ID, {
|
||||
name: '陈十',
|
||||
username: 'chenshi',
|
||||
roleId: 'role-dev',
|
||||
departmentId: 'dept-3',
|
||||
phone: '13900139000',
|
||||
email: 'admin@company.com',
|
||||
});
|
||||
|
||||
assert.equal(patch.name, undefined);
|
||||
assert.equal(patch.username, undefined);
|
||||
assert.equal(patch.roleId, undefined);
|
||||
assert.equal(patch.departmentId, undefined);
|
||||
assert.equal(patch.email, undefined);
|
||||
assert.equal(patch.phone, '13900139000');
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user