diff --git a/__tests__/components/providers/telemetry-provider.test.tsx b/__tests__/components/providers/telemetry-provider.test.tsx index 6c7836bdca..9949d1d432 100644 --- a/__tests__/components/providers/telemetry-provider.test.tsx +++ b/__tests__/components/providers/telemetry-provider.test.tsx @@ -1,5 +1,12 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { render, screen, waitFor } from "@testing-library/react"; + +const useTelemetryMock = vi.hoisted(() => vi.fn()); + +vi.mock("#/hooks/use-telemetry", () => ({ + useTelemetry: useTelemetryMock, +})); + import { TelemetryProvider } from "#/components/providers/telemetry-provider"; import * as telemetry from "#/services/telemetry"; @@ -24,6 +31,7 @@ describe("TelemetryProvider", () => { initializeClientMock = vi .spyOn(telemetry, "initializePostHogClient") .mockResolvedValue(null); + useTelemetryMock.mockClear(); window.location.hash = ""; sessionStorage.clear(); }); @@ -77,6 +85,17 @@ describe("TelemetryProvider", () => { }); }); + it("mounts telemetry lifecycle when analytics are enabled", () => { + render( + +
+ , + ); + + expect(screen.getByTestId("child")).toBeInTheDocument(); + expect(useTelemetryMock).toHaveBeenCalledOnce(); + }); + it("keeps rendering children when eager initialization fails", async () => { initializeClientMock.mockRejectedValueOnce(new Error("unavailable")); @@ -90,7 +109,7 @@ describe("TelemetryProvider", () => { await waitFor(() => expect(initializeClientMock).toHaveBeenCalledOnce()); }); - it("does not initialize when analytics are disabled", () => { + it("does not initialize telemetry lifecycle when analytics are disabled", () => { render(
@@ -100,5 +119,6 @@ describe("TelemetryProvider", () => { expect(screen.getByTestId("child")).toBeInTheDocument(); expect(configureTelemetryMock).toHaveBeenCalledWith(false); expect(initializeClientMock).not.toHaveBeenCalled(); + expect(useTelemetryMock).not.toHaveBeenCalled(); }); }); diff --git a/src/components/providers/telemetry-provider.tsx b/src/components/providers/telemetry-provider.tsx index adaa9ffc2e..ced175a0b8 100644 --- a/src/components/providers/telemetry-provider.tsx +++ b/src/components/providers/telemetry-provider.tsx @@ -1,5 +1,6 @@ import React from "react"; import type { BootstrapConfig } from "posthog-js"; +import { useTelemetry } from "#/hooks/use-telemetry"; import { configurePostHogBootstrap, configureTelemetry, @@ -62,6 +63,11 @@ function readBootstrapIds(): BootstrapConfig | undefined { } } +function TelemetryLifecycle() { + useTelemetry(); + return null; +} + export function TelemetryProvider({ children, config = {}, @@ -91,5 +97,10 @@ export function TelemetryProvider({ } }, [analyticsEnabled, apiHost, apiKey, uiHost]); - return children; + return ( + <> + {analyticsEnabled ? : null} + {children} + + ); }