// apps/web-tanstack/src/instrumentation-client.test.ts import { describe, it, expect, vi, beforeEach } from "vitest"; // Hoist the mock so it's active when instrumentation-client runs its // top-level initSentryClientReact call on import. const initSentryClientReactMock = vi.hoisted(() => vi.fn()); vi.mock("@repo/core-shared/instrumentation/sentry/init-client-react", () => ({ initSentryClientReact: initSentryClientReactMock, })); describe("instrumentation-client", () => { beforeEach(() => { vi.clearAllMocks(); vi.resetModules(); }); it("passes nonce from csp-nonce meta tag to initSentryClientReact", async () => { const meta = document.createElement("meta"); meta.setAttribute("name", "csp-nonce"); meta.setAttribute("content", "test-nonce-xyz"); document.head.appendChild(meta); try { await import("./instrumentation-client"); } finally { document.head.removeChild(meta); } expect(initSentryClientReactMock).toHaveBeenCalledWith( expect.objectContaining({ nonce: "test-nonce-xyz" }), ); }); it("passes empty string nonce when no csp-nonce meta tag is present", async () => { await import("./instrumentation-client"); expect(initSentryClientReactMock).toHaveBeenCalledWith( expect.objectContaining({ nonce: "" }), ); }); it("passes web-tanstack as the app tag", async () => { await import("./instrumentation-client"); expect(initSentryClientReactMock).toHaveBeenCalledWith( expect.objectContaining({ app: "web-tanstack" }), ); }); });