import { describe, expect, it } from 'vitest'; import { isContactableEmail, isSyntheticEmail, phoneFromSyntheticEmail, syntheticEmailFor, } from '../src/email'; describe('synthetic emails', () => { it('mints an address from a phone number', () => { expect(syntheticEmailFor('+34600123456')).toBe('+34600123456@phone.linkder.local'); }); it('recognises its own output', () => { expect(isSyntheticEmail(syntheticEmailFor('+34600123456'))).toBe(true); }); it('treats a real address as contactable', () => { expect(isSyntheticEmail('marc@gmail.com')).toBe(false); expect(isContactableEmail('marc@gmail.com')).toBe(true); }); it('treats null and empty as not contactable rather than throwing', () => { expect(isSyntheticEmail(null)).toBe(true); expect(isSyntheticEmail(undefined)).toBe(true); expect(isSyntheticEmail('')).toBe(true); expect(isContactableEmail(null)).toBe(false); }); it('is case insensitive — a bounce is a bounce whatever the casing', () => { expect(isSyntheticEmail('+34600123456@PHONE.LINKDER.LOCAL')).toBe(true); }); it('does not match a lookalike domain', () => { expect(isSyntheticEmail('someone@phone.linkder.local.evil.com')).toBe(false); expect(isSyntheticEmail('someone@notphone.linkder.local')).toBe(false); }); it('recovers the phone number for support tooling', () => { expect(phoneFromSyntheticEmail('+34600123456@phone.linkder.local')).toBe('+34600123456'); expect(phoneFromSyntheticEmail('marc@gmail.com')).toBeNull(); }); });