// @vitest-environment happy-dom import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; import { cleanup, render, screen } from "@testing-library/react"; import { setup } from "goober"; import React from "react"; import { PerformancePage } from "../../../pages/performance/index.js"; import { RouterContext } from "../../../router/context.js"; import type { Router } from "../../../router/context.js"; import { SubscriptionScope } from "jazz-tools"; beforeAll(() => { SubscriptionScope.enableProfiling(); setup(React.createElement); }); afterEach(() => { cleanup(); vi.restoreAllMocks(); }); const mockRouter: Router = { path: [], setPage: vi.fn(), addPages: vi.fn(), goToIndex: vi.fn(), goBack: vi.fn(), }; function RouterProvider({ children }: { children: React.ReactNode }) { return ( {children} ); } describe("PerformancePage", () => { it("shows empty state when no entries", () => { vi.spyOn(performance, "getEntriesByType").mockReturnValue([]); render( {}} /> , ); expect(screen.getByText(/No subscriptions recorded yet/)).toBeDefined(); }); it("renders a row when performance entries are provided", () => { const mockMeasure = { entryType: "measure", name: "jazz.subscription:test-uuid", startTime: 100, duration: 50, detail: { type: "jazz-subscription", uuid: "test-uuid", id: "co_z123abc", source: "useCoState", resolve: { depth: 1 }, status: "loaded", startTime: 100, endTime: 150, duration: 50, }, } as unknown as PerformanceEntry; vi.spyOn(performance, "getEntriesByType").mockImplementation((type) => { if (type === "measure") return [mockMeasure]; return []; }); render( {}} /> , ); expect(screen.getByText("co_z123abc")).toBeDefined(); expect(screen.getByText("useCoState")).toBeDefined(); }); });