openclaw/src/agents/runtime-plugins.test.ts

51 lines
1.5 KiB
TypeScript

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,
},
});
});
});