40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import {
|
|
DINGTALK_APPROVAL_NO_MAX_LENGTH,
|
|
getDingtalkApprovalNoError,
|
|
normalizeDingtalkApprovalNo,
|
|
validateDingtalkApprovalNo,
|
|
} from '@/lib/dingtalk-approval-no'
|
|
|
|
describe('dingtalk approval number', () => {
|
|
test('允许不填写', () => {
|
|
expect(normalizeDingtalkApprovalNo(' ')).toBeNull()
|
|
expect(validateDingtalkApprovalNo('')).toBe(true)
|
|
expect(validateDingtalkApprovalNo(null)).toBe(true)
|
|
})
|
|
|
|
test('接受日期前缀加任意长度数字后缀', () => {
|
|
expect(validateDingtalkApprovalNo('202508211445000157693')).toBe(true)
|
|
expect(validateDingtalkApprovalNo('202402291')).toBe(true)
|
|
expect(validateDingtalkApprovalNo(' 20250821123 ')).toBe(true)
|
|
})
|
|
|
|
test('拒绝非数字内容和缺少后续编号', () => {
|
|
expect(getDingtalkApprovalNoError('20250821A1')).toBe('钉钉审批编号只能输入数字')
|
|
expect(getDingtalkApprovalNoError('20250821')).toBe('钉钉审批编号需包含8位日期和后续编号')
|
|
})
|
|
|
|
test('拒绝无效日期前缀', () => {
|
|
expect(getDingtalkApprovalNoError('20250230123')).toBe('钉钉审批编号前8位不是有效日期')
|
|
expect(getDingtalkApprovalNoError('20230229123')).toBe('钉钉审批编号前8位不是有效日期')
|
|
expect(getDingtalkApprovalNoError('20251301123')).toBe('钉钉审批编号前8位不是有效日期')
|
|
})
|
|
|
|
test('限制异常超长输入', () => {
|
|
const value = `20250821${'1'.repeat(DINGTALK_APPROVAL_NO_MAX_LENGTH - 7)}`
|
|
expect(value).toHaveLength(DINGTALK_APPROVAL_NO_MAX_LENGTH + 1)
|
|
expect(getDingtalkApprovalNoError(value)).toBe(
|
|
`钉钉审批编号不能超过${DINGTALK_APPROVAL_NO_MAX_LENGTH}位`,
|
|
)
|
|
})
|
|
})
|