import { describe, expect, it } from "vitest"; import { eventKindToUrl, type RoutableEvent } from "./event-routing"; // A minimal event factory keeps the assertions short and keeps the // focus on what the helper actually inspects (kind + the relevant // entity-id field for that kind). function evt(overrides: Partial & { kind: RoutableEvent["kind"] }): RoutableEvent { return { claimId: null, remittanceId: null, npi: undefined, ...overrides, }; } describe("eventKindToUrl", () => { // ----- claim_* → /claims?claim=ID ------------------------------- it("routes claim_submitted to /claims?claim=ID", () => { expect( eventKindToUrl(evt({ kind: "claim_submitted", claimId: "CLM-1" })), ).toBe("/claims?claim=CLM-1"); }); it("routes claim_paid to /claims?claim=ID", () => { expect( eventKindToUrl(evt({ kind: "claim_paid", claimId: "CLM-2" })), ).toBe("/claims?claim=CLM-2"); }); it("routes claim_denied to /claims?claim=ID", () => { expect( eventKindToUrl(evt({ kind: "claim_denied", claimId: "CLM-3" })), ).toBe("/claims?claim=CLM-3"); }); it("routes claim_accepted to /claims?claim=ID", () => { expect( eventKindToUrl(evt({ kind: "claim_accepted", claimId: "CLM-4" })), ).toBe("/claims?claim=CLM-4"); }); it("percent-encodes the claim id when it contains special chars", () => { expect( eventKindToUrl(evt({ kind: "claim_paid", claimId: "CLM/1+2" })), ).toBe("/claims?claim=CLM%2F1%2B2"); }); it("returns null for claim_* when claimId is missing", () => { expect( eventKindToUrl(evt({ kind: "claim_paid", claimId: null })), ).toBeNull(); expect( eventKindToUrl(evt({ kind: "claim_paid", claimId: undefined })), ).toBeNull(); }); // ----- remit_received → null (Phase 4) -------------------------- it("returns null for remit_received (Phase 4 drawer not built yet)", () => { expect( eventKindToUrl(evt({ kind: "remit_received", remittanceId: "REM-1" })), ).toBeNull(); }); // ----- provider_added → /providers?provider=NPI ----------------- it("routes provider_added to /providers?provider=NPI", () => { expect( eventKindToUrl(evt({ kind: "provider_added", npi: "1730187395" })), ).toBe("/providers?provider=1730187395"); }); it("returns null for provider_added when npi is missing", () => { expect(eventKindToUrl(evt({ kind: "provider_added", npi: undefined }))).toBeNull(); }); // ----- default branch ------------------------------------------ it("returns null for unhandled kinds (manual_match)", () => { expect(eventKindToUrl(evt({ kind: "manual_match" }))).toBeNull(); }); it("returns null for unknown kinds (defensive default)", () => { // Cast through unknown so the type-checker doesn't widen the // literal away from the exhaustive union. const unknown = { kind: "future_kind" } as unknown as RoutableEvent; expect(eventKindToUrl(unknown)).toBeNull(); }); });