// packages/core-shared/src/instrumentation/sentry/init-client.test.ts import { describe, it, expect, vi, beforeEach } from "vitest"; const { replayIntegration } = vi.hoisted(() => { const replayIntegration = vi.fn((opts: unknown) => ({ name: "Replay", _opts: opts, })); return { replayIntegration }; }); vi.mock("@sentry/nextjs", () => ({ init: vi.fn(), replayIntegration, })); import * as Sentry from "@sentry/nextjs"; import { initSentryClient } from "@/instrumentation/sentry/init-client"; describe("initSentryClient", () => { beforeEach(() => { vi.clearAllMocks(); }); it("calls Sentry.init with sendDefaultPii: false", () => { initSentryClient({ dsn: "https://x@y/1", app: "web-next" }); const call = (Sentry.init as ReturnType).mock .calls[0]![0] as Record; expect(call["sendDefaultPii"]).toBe(false); }); it("attaches replay integration with maskAllText/maskAllInputs/blockAllMedia: true", () => { initSentryClient({ dsn: "https://x@y/1", app: "web-next" }); expect(replayIntegration).toHaveBeenCalledTimes(1); const replayOpts = (replayIntegration as ReturnType).mock .calls[0]![0] as Record; expect(replayOpts["maskAllText"]).toBe(true); expect(replayOpts["maskAllInputs"]).toBe(true); expect(replayOpts["blockAllMedia"]).toBe(true); }); it("defaults replaysSessionSampleRate to 0.0", () => { initSentryClient({ dsn: "https://x@y/1", app: "web-next" }); const call = (Sentry.init as ReturnType).mock .calls[0]![0] as Record; expect(call["replaysSessionSampleRate"]).toBe(0.0); }); it("defaults replaysOnErrorSampleRate to 1.0", () => { initSentryClient({ dsn: "https://x@y/1", app: "web-next" }); const call = (Sentry.init as ReturnType).mock .calls[0]![0] as Record; expect(call["replaysOnErrorSampleRate"]).toBe(1.0); }); it("attaches beforeSend + beforeSendTransaction", () => { initSentryClient({ dsn: "https://x@y/1", app: "web-next" }); const call = (Sentry.init as ReturnType).mock .calls[0]![0] as Record; expect(typeof call["beforeSend"]).toBe("function"); expect(typeof call["beforeSendTransaction"]).toBe("function"); }); it("is a no-op when dsn is empty", () => { initSentryClient({ dsn: "", app: "web-next" }); expect(Sentry.init).not.toHaveBeenCalled(); }); });