import { __resetTelemetryForTests, registerTelemetry, trackClick, withClickTracking, } from "../telemetry"; describe("telemetry registry", () => { afterEach(() => __resetTelemetryForTests()); it("is a no-op until a sink is registered", () => { // The whole point of the default: a consumer that never opts in must not // have this throw, buffer, or reach the network. expect(() => trackClick("login.submit")).not.toThrow(); }); it("forwards element and route to the registered sink", () => { const sink = { trackClick: jest.fn() }; registerTelemetry(sink); trackClick("login.submit", "/login"); expect(sink.trackClick).toHaveBeenCalledWith("login.submit", "/login"); }); it("swallows a sink that throws", () => { // A failing sink must never take down the press handler it is observing. registerTelemetry({ trackClick: () => { throw new Error("collector unreachable"); }, }); expect(() => trackClick("login.submit")).not.toThrow(); }); it("stops reporting once the sink is removed", () => { const sink = { trackClick: jest.fn() }; registerTelemetry(sink); registerTelemetry(null); trackClick("login.submit"); expect(sink.trackClick).not.toHaveBeenCalled(); }); describe("withClickTracking", () => { it("returns the original handler when there is no id", () => { // Identity, not a wrapper: an untagged control should not pay for a // closure on every render. const handler = jest.fn(); expect(withClickTracking(undefined, handler)).toBe(handler); }); it("reports before invoking the handler", () => { const order: string[] = []; registerTelemetry({ trackClick: () => order.push("tracked") }); const wrapped = withClickTracking("login.submit", () => order.push("handled")); wrapped?.(); expect(order).toEqual(["tracked", "handled"]); }); it("still reports when there is no handler to call", () => { const sink = { trackClick: jest.fn() }; registerTelemetry(sink); withClickTracking("login.submit", undefined)?.(); expect(sink.trackClick).toHaveBeenCalledWith("login.submit", undefined); }); it("passes arguments and the return value through", () => { registerTelemetry({ trackClick: jest.fn() }); const wrapped = withClickTracking("row.select", (id: never) => `picked ${String(id)}`); expect(wrapped?.("abc" as never)).toBe("picked abc"); }); }); });