import { describe, it, expect } from "vitest"; import { RecordingAnalytics } from "./recording-analytics"; describe("RecordingAnalytics", () => { it("track() pushes to tracked[]", () => { const analytics = new RecordingAnalytics(); analytics.track("button_clicked", { page: "home" }); expect(analytics.tracked).toHaveLength(1); expect(analytics.tracked[0]!.event).toBe("button_clicked"); expect(analytics.tracked[0]!.attributes).toEqual({ page: "home" }); }); it("identify() pushes to identified[]", () => { const analytics = new RecordingAnalytics(); analytics.identify({ id: "user_1" }, { plan: "pro" }); expect(analytics.identified).toHaveLength(1); expect(analytics.identified[0]!.user).toEqual({ id: "user_1" }); expect(analytics.identified[0]!.attributes).toEqual({ plan: "pro" }); }); it("pageView() pushes to pageViewed[]", () => { const analytics = new RecordingAnalytics(); analytics.pageView("/home", { referrer: "google" }); expect(analytics.pageViewed).toHaveLength(1); expect(analytics.pageViewed[0]!.path).toBe("/home"); expect(analytics.pageViewed[0]!.attributes).toEqual({ referrer: "google" }); }); it("flush() drains all arrays and resolves", async () => { const analytics = new RecordingAnalytics(); analytics.track("event_1"); analytics.identify({ id: "user_1" }); analytics.pageView("/about"); await analytics.flush(); expect(analytics.tracked).toEqual([]); expect(analytics.identified).toEqual([]); expect(analytics.pageViewed).toEqual([]); }); it("methods accept calls without attributes", () => { const analytics = new RecordingAnalytics(); analytics.track("no_attrs"); analytics.identify({ id: "user_2" }); analytics.pageView("/contact"); expect(analytics.tracked[0]!.attributes).toBeUndefined(); expect(analytics.identified[0]!.attributes).toBeUndefined(); expect(analytics.pageViewed[0]!.attributes).toBeUndefined(); }); });