gongxiangp2/lib/__tests__/dingtalk-approval-no.test.ts

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}位`,
)
})
})