import { DEFAULT_CLIENT_SETTINGS, DEFAULT_UNIFIED_SETTINGS } from "@t3tools/contracts"; import { createMemoryHistory, createRootRoute, createRouter, RouterProvider, } from "@tanstack/react-router"; import { act, StrictMode, type ReactNode } from "react"; import { create, type ReactTestRenderer } from "react-test-renderer"; import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; const { listBrowserImportSources } = vi.hoisted(() => ({ listBrowserImportSources: vi.fn().mockResolvedValue([]), })); vi.mock("../preview/previewBridge", () => ({ previewBridge: { listBrowserImportSources }, })); vi.mock("../../env", () => ({ isElectron: true })); vi.mock("../../state/environments", () => ({ useEnvironments: () => ({ environments: [], isReady: true }), usePrimaryEnvironment: () => null, })); vi.mock("../../hooks/useSettings", () => ({ PRIMARY_SETTINGS_UNAVAILABLE_MESSAGE: "Connect to an environment", useClientSettings: (selector: (settings: typeof DEFAULT_CLIENT_SETTINGS) => unknown) => selector(DEFAULT_CLIENT_SETTINGS), useClientSettingsHydrated: () => true, usePrimarySettingsAvailable: () => true, usePrimarySettings: () => DEFAULT_UNIFIED_SETTINGS, useUpdatePrimarySettings: () => vi.fn(), })); vi.mock("./settingsLayout", async (importOriginal) => ({ ...(await importOriginal()), SettingsPageContainer: ({ children }: { children: ReactNode }) => children, })); import { IntegrationsSettingsPanel } from "./IntegrationsSettings"; let renderer: ReactTestRenderer | undefined; beforeEach(() => { vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true); listBrowserImportSources.mockClear(); }); afterEach(async () => { await act(() => renderer?.unmount()); vi.unstubAllGlobals(); }); async function openSettings() { const router = createRouter({ routeTree: createRootRoute({ component: IntegrationsSettingsPanel }), history: createMemoryHistory(), }); await router.load(); await act(() => { renderer = create( , ); }); expect(renderer!.root.findByType(IntegrationsSettingsPanel)).toBeDefined(); } describe("Integrations browser discovery", () => { it("does not scan browser files when entering or revisiting settings", async () => { await openSettings(); expect(listBrowserImportSources).not.toHaveBeenCalled(); await act(() => renderer?.unmount()); await openSettings(); expect(listBrowserImportSources).not.toHaveBeenCalled(); }); });