import { describe, it, expect } from 'vitest'; import { extractInquiryFields } from '@/lib/services/website-intake-fields'; describe('extractInquiryFields', () => { it('maps a berth inquiry payload (berth -> mooringNumber)', () => { const f = extractInquiryFields({ first_name: 'Jane', last_name: 'Doe', email: 'jane@example.com', phone: '+15551234', berth: 'A1', interest: 'berths', }); expect(f).toMatchObject({ firstName: 'Jane', lastName: 'Doe', fullName: 'Jane Doe', email: 'jane@example.com', phone: '+15551234', mooringNumber: 'A1', placeOfResidence: null, }); }); it('maps a residence inquiry payload (address -> placeOfResidence, no mooring)', () => { const f = extractInquiryFields({ first_name: 'Sam', last_name: 'Lee', email: 's@example.com', phone: '2', address: 'London', interest: 'residences', }); expect(f.mooringNumber).toBeNull(); expect(f.placeOfResidence).toBe('London'); expect(f.fullName).toBe('Sam Lee'); }); it('maps a contact form payload (interest[] -> joined interestType + comments)', () => { const f = extractInquiryFields({ first_name: 'Ann', last_name: 'Poe', email: 'a@example.com', interest: ['owner', 'broker'], comments: 'Please call me', }); expect(f.interestType).toBe('owner, broker'); expect(f.comments).toBe('Please call me'); expect(f.phone).toBe(''); }); it('trims whitespace and degrades missing/garbage fields safely', () => { const f = extractInquiryFields({ first_name: ' Jo ', last_name: 42 as unknown }); expect(f.firstName).toBe('Jo'); expect(f.fullName).toBe('Jo'); expect(f.email).toBe(''); expect(f.mooringNumber).toBeNull(); expect(f.interestType).toBeNull(); }); it('returns all-empty for an empty payload', () => { expect(extractInquiryFields({})).toMatchObject({ firstName: '', lastName: '', fullName: '', email: '', phone: '', mooringNumber: null, placeOfResidence: null, comments: null, interestType: null, }); }); });