// 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 { 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); }); });