import { describe, it, expect } from "vitest"; import { RecordingLogger } from "@/instrumentation/recording-logger"; describe("RecordingLogger", () => { it("records captureException calls (err + ctx)", () => { const logger = new RecordingLogger(); const err = new Error("x"); logger.captureException(err, { tags: { feature: "blog" } }); expect(logger.captures).toHaveLength(1); expect(logger.captures[0]).toMatchObject({ kind: "exception", err, ctx: { tags: { feature: "blog" } }, }); }); it("records captureMessage calls", () => { const logger = new RecordingLogger(); logger.captureMessage("hello", "warning", { extras: { foo: 1 } }); expect(logger.captures[0]).toMatchObject({ kind: "message", message: "hello", level: "warning", }); }); it("records breadcrumbs", () => { const logger = new RecordingLogger(); logger.addBreadcrumb({ category: "test", message: "x", level: "info" }); expect(logger.breadcrumbs).toHaveLength(1); expect(logger.breadcrumbs[0]!.category).toBe("test"); }); it("records setUser calls", () => { const logger = new RecordingLogger(); logger.setUser({ id: "u1" }); logger.setUser(null); expect(logger.users).toEqual([{ id: "u1" }, null]); }); it("reset() clears all recordings", () => { const logger = new RecordingLogger(); logger.captureException(new Error("x")); logger.addBreadcrumb({ category: "c", message: "m" }); logger.setUser({ id: "u" }); logger.reset(); expect(logger.captures).toHaveLength(0); expect(logger.breadcrumbs).toHaveLength(0); expect(logger.users).toHaveLength(0); }); it("findCapture returns first capture matching predicate", () => { const logger = new RecordingLogger(); logger.captureException(new Error("first")); logger.captureException(new Error("second")); const found = logger.findCapture( (c) => c.kind === "exception" && (c.err as Error).message === "second", ); expect(found).toBeDefined(); }); });