fix(data): 清理旧数据并保护服务端写入
This commit is contained in:
48
apps/web/lib/members.test.ts
Normal file
48
apps/web/lib/members.test.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
|
||||
import {
|
||||
generateUsernameFromName,
|
||||
ensureMemberUsernames,
|
||||
type Member,
|
||||
} from './members';
|
||||
|
||||
function member(overrides: Partial<Member>): Member {
|
||||
return {
|
||||
id: overrides.id ?? 'm-1',
|
||||
name: overrides.name ?? '张三',
|
||||
departmentId: overrides.departmentId ?? 'dept-1',
|
||||
roleId: overrides.roleId ?? 'role-dev',
|
||||
phone: overrides.phone ?? '',
|
||||
email: overrides.email ?? '',
|
||||
password: overrides.password ?? 'Ftb@2024',
|
||||
createdAt: overrides.createdAt ?? '2026-07-01',
|
||||
username: overrides.username,
|
||||
};
|
||||
}
|
||||
|
||||
test('generateUsernameFromName uses lowercase full pinyin for Chinese names', () => {
|
||||
assert.equal(generateUsernameFromName('张三', []), 'zhangsan');
|
||||
assert.equal(generateUsernameFromName(' 欧阳娜娜 ', []), 'ouyangnana');
|
||||
});
|
||||
|
||||
test('generateUsernameFromName appends zero-padded duplicate suffixes', () => {
|
||||
assert.equal(generateUsernameFromName('张三', ['zhangsan']), 'zhangsan1');
|
||||
assert.equal(generateUsernameFromName('张三', ['zhangsan', 'zhangsan1']), 'zhangsan01');
|
||||
assert.equal(generateUsernameFromName('张三', ['zhangsan', 'zhangsan1', 'zhangsan01']), 'zhangsan001');
|
||||
});
|
||||
|
||||
test('generateUsernameFromName keeps existing username when editing another member', () => {
|
||||
assert.equal(generateUsernameFromName('张三', ['zhangsan'], 'lisi'), 'lisi');
|
||||
});
|
||||
|
||||
test('ensureMemberUsernames fills missing usernames without syncing renamed members', () => {
|
||||
const result = ensureMemberUsernames([
|
||||
member({ id: 'm-1', name: '张三', username: 'lisi' }),
|
||||
member({ id: 'm-2', name: '张三' }),
|
||||
]);
|
||||
|
||||
assert.equal(result.changed, true);
|
||||
assert.equal(result.members[0].username, 'lisi');
|
||||
assert.equal(result.members[1].username, 'zhangsan');
|
||||
});
|
||||
Reference in New Issue
Block a user