// 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" }),
    );
  });
});
