import { describe, expect, it } from "vitest"; import { resolveOutboundTarget } from "./targets.js"; describe("resolveOutboundTarget", () => { it.each([ { name: "normalizes whatsapp target when provided", input: { provider: "whatsapp" as const, to: " (555) 123-4567 " }, expected: { ok: true as const, to: "+5551234567" }, }, { name: "keeps whatsapp group targets", input: { provider: "whatsapp" as const, to: "120363401234567890@g.us" }, expected: { ok: true as const, to: "120363401234567890@g.us" }, }, { name: "normalizes prefixed/uppercase whatsapp group targets", input: { provider: "whatsapp" as const, to: " WhatsApp:Group:120363401234567890@G.US ", }, expected: { ok: true as const, to: "120363401234567890@g.us" }, }, { name: "falls back to whatsapp allowFrom", input: { provider: "whatsapp" as const, to: "", allowFrom: ["+1555"] }, expected: { ok: true as const, to: "+1555" }, }, { name: "normalizes whatsapp allowFrom fallback targets", input: { provider: "whatsapp" as const, to: "", allowFrom: ["whatsapp:(555) 123-4567"], }, expected: { ok: true as const, to: "+5551234567" }, }, { name: "rejects invalid whatsapp target", input: { provider: "whatsapp" as const, to: "wat" }, expectedErrorIncludes: "WhatsApp", }, { name: "rejects whatsapp without to when allowFrom missing", input: { provider: "whatsapp" as const, to: " " }, expectedErrorIncludes: "WhatsApp", }, { name: "rejects whatsapp allowFrom fallback when invalid", input: { provider: "whatsapp" as const, to: "", allowFrom: ["wat"] }, expectedErrorIncludes: "WhatsApp", }, ])("$name", ({ input, expected, expectedErrorIncludes }) => { const res = resolveOutboundTarget(input); if (expected) { expect(res).toEqual(expected); return; } expect(res.ok).toBe(false); if (!res.ok) { expect(res.error.message).toContain(expectedErrorIncludes); } }); it("rejects telegram with missing target", () => { const res = resolveOutboundTarget({ provider: "telegram", to: " " }); expect(res.ok).toBe(false); if (!res.ok) { expect(res.error.message).toContain("Telegram"); } }); it("rejects webchat delivery", () => { const res = resolveOutboundTarget({ provider: "webchat", to: "x" }); expect(res.ok).toBe(false); if (!res.ok) { expect(res.error.message).toContain("WebChat"); } }); });