62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
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();
|
|
});
|
|
});
|