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 } => ({ tmpId: 'c1', name: '', phone: '', relationShip: '', ...over }) const form = (over: Partial = {}): 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: '配偶' }]) } }) })