Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/modules/shared/scripts/ScriptSentryReplay.test.tsx
T

64 lines
1.9 KiB
TypeScript

// @vitest-environment jsdom
import { cleanup, render, waitFor } from "@testing-library/react";
import { afterEach, describe, expect, it, vi } from "vitest";
import ScriptSentryReplay from "./ScriptSentryReplay";
const mocks = vi.hoisted(() => ({
disableSentryReplay: vi.fn(async () => true),
enableSentryReplay: vi.fn(() => true),
hasConsent: vi.fn(() => false),
readClientSentryConfig: vi.fn(() => ({
dsn: "https://public@example.test/1",
replaysOnErrorSampleRate: 1,
replaysSessionSampleRate: 0.1,
})),
}));
vi.mock("~/utils/data/useRootData", () => ({
useRootData: () => ({ userSession: { cookies: [] } }),
}));
vi.mock("~/utils/helpers/CookieHelper", () => ({
default: { hasConsent: mocks.hasConsent },
}));
vi.mock("~/sentry.client", () => ({
readClientSentryConfig: mocks.readClientSentryConfig,
}));
vi.mock("~/sentry-replay.client", () => ({
disableSentryReplay: mocks.disableSentryReplay,
enableSentryReplay: mocks.enableSentryReplay,
}));
afterEach(() => {
cleanup();
vi.clearAllMocks();
mocks.hasConsent.mockReturnValue(false);
});
describe("ScriptSentryReplay consent gate", () => {
it("starts Replay only after analytics consent and stops it on revocation", async () => {
const view = render(<ScriptSentryReplay />);
expect(mocks.readClientSentryConfig).not.toHaveBeenCalled();
expect(mocks.enableSentryReplay).not.toHaveBeenCalled();
mocks.hasConsent.mockReturnValue(true);
view.rerender(<ScriptSentryReplay />);
await waitFor(() => {
expect(mocks.enableSentryReplay).toHaveBeenCalledWith({
dsn: "https://public@example.test/1",
replaysOnErrorSampleRate: 1,
replaysSessionSampleRate: 0.1,
});
});
mocks.hasConsent.mockReturnValue(false);
view.rerender(<ScriptSentryReplay />);
await waitFor(() => {
expect(mocks.disableSentryReplay).toHaveBeenCalled();
});
});
});