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