SEC_Warehouse/tests/unit/family/contact-validate.spec.ts

59 lines
2.2 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import { validateContactForm, type ContactFormInput } from '@/pages/family/contact/validate'
import type { CareContact } from '@/api/careMember'
const contact = (over: Partial<CareContact & { tmpId: string }> = {}): CareContact & { tmpId: string } => ({
tmpId: 'c1',
name: '',
phone: '',
relationShip: '',
...over
})
const form = (over: Partial<ContactFormInput> = {}): ContactFormInput => ({
name: '王奶奶',
idNumber: '440301194001010000',
address: '深圳市南山区',
contacts: [],
...over
})
describe('添加关爱对象表单校验', () => {
it('必填齐全返回 ok', () => {
const result = validateContactForm(form())
expect(result.ok).toBe(true)
if (result.ok) expect(result.contacts).toEqual([])
})
it('任一必填缺失/空白报 请填写完整', () => {
const r1 = validateContactForm(form({ name: '' }))
const r2 = validateContactForm(form({ idNumber: ' ' }))
const r3 = validateContactForm(form({ address: '' }))
expect(!r1.ok && r1.error).toBe('请填写完整')
expect(!r2.ok && r2.error).toBe('请填写完整')
expect(!r3.ok && r3.error).toBe('请填写完整')
})
it('空白联系人卡被过滤,不阻断提交', () => {
const result = validateContactForm(form({ contacts: [contact()] }))
expect(result.ok).toBe(true)
if (result.ok) expect(result.contacts).toEqual([])
})
it('联系人只填了姓名或电话时报 请完整填写联系人', () => {
const r1 = validateContactForm(form({ contacts: [contact({ name: '张女士' })] }))
const r2 = validateContactForm(form({ contacts: [contact({ phone: '13800138000' })] }))
expect(!r1.ok && r1.error).toBe('请完整填写联系人')
expect(!r2.ok && r2.error).toBe('请完整填写联系人')
})
it('姓名电话齐全的联系人保留,且提交前剥掉 tmpId', () => {
const c = contact({ tmpId: 'c9', name: '张女士', phone: '13800138000', relationShip: '配偶' })
const result = validateContactForm(form({ contacts: [c] }))
expect(result.ok).toBe(true)
if (result.ok) {
expect(result.contacts).toEqual([{ name: '张女士', phone: '13800138000', relationShip: '配偶' }])
}
})
})