import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const hoisted = vi.hoisted(() => ({ resolveRuntimePluginRegistry: vi.fn(), })); vi.mock("../plugins/loader.js", () => ({ resolveRuntimePluginRegistry: hoisted.resolveRuntimePluginRegistry, })); describe("ensureRuntimePluginsLoaded", () => { let ensureRuntimePluginsLoaded: typeof import("./runtime-plugins.js").ensureRuntimePluginsLoaded; beforeAll(async () => { ({ ensureRuntimePluginsLoaded } = await import("./runtime-plugins.js")); }); beforeEach(() => { hoisted.resolveRuntimePluginRegistry.mockReset(); hoisted.resolveRuntimePluginRegistry.mockReturnValue(undefined); }); it("does not reactivate plugins when a process already has an active registry", async () => { hoisted.resolveRuntimePluginRegistry.mockReturnValue({}); ensureRuntimePluginsLoaded({ config: {} as never, workspaceDir: "/tmp/workspace", allowGatewaySubagentBinding: true, }); expect(hoisted.resolveRuntimePluginRegistry).toHaveBeenCalledTimes(1); }); it("resolves runtime plugins through the shared runtime helper", async () => { ensureRuntimePluginsLoaded({ config: {} as never, workspaceDir: "/tmp/workspace", allowGatewaySubagentBinding: true, }); expect(hoisted.resolveRuntimePluginRegistry).toHaveBeenCalledWith({ config: {} as never, workspaceDir: "/tmp/workspace", runtimeOptions: { allowGatewaySubagentBinding: true, }, }); }); });