userDetailMappers.test.ts
3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// REQ-USR-001 / REQ-USR-002: 用户单据常量与提交映射纯函数单测(枚举/默认/正则/错误码 + toCreateReq/toUpdateReq/userVoToFormValues)
import { describe, it, expect } from 'vitest';
import {
USER_TYPE_OPTIONS,
LANGUAGE_OPTIONS,
CREATE_DEFAULTS,
USERNAME_PATTERN,
ERR_VALIDATION,
ERR_USERNAME_EXISTS,
ERR_USER_NOT_FOUND,
ERR_NO_PERMISSION,
MODE_CREATE,
MODE_EDIT,
toCreateReq,
toUpdateReq,
userVoToFormValues,
type UserFormValues,
} from '../../src/pages/usr/UserDetail/constants';
import type { UserVO } from '../../src/api/types';
function makeFormValues(over: Partial<UserFormValues> = {}): UserFormValues {
return {
sUserName: 'zhangsan',
sUserNo: 'zs',
iEmployeeId: 3,
sUserType: '普通用户',
sLanguage: '中文',
iCanModifyBill: 0,
iIsVoid: 0,
...over,
};
}
describe('用户单据常量与映射', () => {
it('constants enums and defaults', () => {
expect(USER_TYPE_OPTIONS).toEqual(['普通用户', '超级管理员']);
expect(LANGUAGE_OPTIONS).toEqual(['中文', '英文', '繁体']);
expect(CREATE_DEFAULTS.sUserType).toBe('普通用户');
expect(CREATE_DEFAULTS.iCanModifyBill).toBe(0);
expect(CREATE_DEFAULTS.sLanguage).toBeUndefined();
expect(USERNAME_PATTERN.test('ab_12')).toBe(true);
expect(USERNAME_PATTERN.test('ab')).toBe(false);
expect(USERNAME_PATTERN.test('有中文')).toBe(false);
expect(ERR_VALIDATION).toBe(40001);
expect(ERR_USERNAME_EXISTS).toBe(40901);
expect(ERR_USER_NOT_FOUND).toBe(40401);
expect(ERR_NO_PERMISSION).toBe(40301);
expect(MODE_CREATE).toBe('create');
expect(MODE_EDIT).toBe('edit');
});
it('toCreateReq maps form values + permissionIds (no password)', () => {
const req = toCreateReq(makeFormValues({ iCanModifyBill: 1 }), [1, 2]);
expect(req.sUserName).toBe('zhangsan');
expect(req.sUserNo).toBe('zs');
expect(req.iEmployeeId).toBe(3);
expect(req.sUserType).toBe('普通用户');
expect(req.sLanguage).toBe('中文');
expect(req.iCanModifyBill).toBe(1);
expect(req.permissionIds).toEqual([1, 2]);
expect(req).not.toHaveProperty('initialPassword');
expect(req).not.toHaveProperty('iIsVoid');
});
it('toUpdateReq maps without sUserName + includes iIsVoid + full permissionIds', () => {
const req = toUpdateReq(makeFormValues({ iIsVoid: 1 }), [2, 3]);
expect(req).not.toHaveProperty('sUserName');
expect(req.iIsVoid).toBe(1);
expect(req.permissionIds).toEqual([2, 3]);
expect(req.sUserType).toBe('普通用户');
expect(req.sLanguage).toBe('中文');
expect(req.iCanModifyBill).toBe(0);
});
it('userVoToFormValues fills from UserVO', () => {
const vo: UserVO = {
id: 7,
sUserName: 'zhangsan',
employeeName: '张三',
sUserNo: 'zs',
departmentName: null,
sUserType: '超级管理员',
sLanguage: '英文',
iIsVoid: 1,
tLastLoginDate: null,
sCreator: 'admin',
tCreateDate: '2026-01-01T00:00:00',
};
const fv = userVoToFormValues(vo);
expect(fv.sUserName).toBe('zhangsan');
expect(fv.sUserNo).toBe('zs');
expect(fv.sUserType).toBe('超级管理员');
expect(fv.sLanguage).toBe('英文');
expect(fv.iCanModifyBill).toBe(0);
expect(fv.iIsVoid).toBe(1);
});
});