mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-13 10:11:20 +00:00
119 lines
3.6 KiB
TypeScript
119 lines
3.6 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const loadConfigMock = vi.fn<typeof import("../../config/config.js").loadConfig>();
|
|
const applyPluginAutoEnableMock =
|
|
vi.fn<typeof import("../../config/plugin-auto-enable.js").applyPluginAutoEnable>();
|
|
const resolveAgentWorkspaceDirMock = vi.fn<
|
|
typeof import("../../agents/agent-scope.js").resolveAgentWorkspaceDir
|
|
>(() => "/resolved-workspace");
|
|
const resolveDefaultAgentIdMock = vi.fn<
|
|
typeof import("../../agents/agent-scope.js").resolveDefaultAgentId
|
|
>(() => "default");
|
|
|
|
let resolvePluginRuntimeLoadContext: typeof import("./load-context.js").resolvePluginRuntimeLoadContext;
|
|
let buildPluginRuntimeLoadOptions: typeof import("./load-context.js").buildPluginRuntimeLoadOptions;
|
|
|
|
vi.mock("../../config/config.js", () => ({
|
|
loadConfig: loadConfigMock,
|
|
}));
|
|
|
|
vi.mock("../../config/plugin-auto-enable.js", () => ({
|
|
applyPluginAutoEnable: applyPluginAutoEnableMock,
|
|
}));
|
|
|
|
vi.mock("../../agents/agent-scope.js", () => ({
|
|
resolveAgentWorkspaceDir: resolveAgentWorkspaceDirMock,
|
|
resolveDefaultAgentId: resolveDefaultAgentIdMock,
|
|
}));
|
|
|
|
describe("resolvePluginRuntimeLoadContext", () => {
|
|
beforeEach(async () => {
|
|
vi.resetModules();
|
|
({ resolvePluginRuntimeLoadContext, buildPluginRuntimeLoadOptions } =
|
|
await import("./load-context.js"));
|
|
loadConfigMock.mockReset();
|
|
applyPluginAutoEnableMock.mockReset();
|
|
resolveAgentWorkspaceDirMock.mockClear();
|
|
resolveDefaultAgentIdMock.mockClear();
|
|
|
|
loadConfigMock.mockReturnValue({ plugins: {} });
|
|
applyPluginAutoEnableMock.mockImplementation((params) => ({
|
|
config: params.config ?? {},
|
|
changes: [],
|
|
autoEnabledReasons: {},
|
|
}));
|
|
});
|
|
|
|
it("builds the runtime plugin load context from the auto-enabled config", () => {
|
|
const rawConfig = { plugins: {} };
|
|
const resolvedConfig = {
|
|
plugins: {
|
|
entries: {
|
|
demo: { enabled: true },
|
|
},
|
|
},
|
|
};
|
|
const env = { HOME: "/tmp/openclaw-home" } as NodeJS.ProcessEnv;
|
|
|
|
applyPluginAutoEnableMock.mockReturnValue({
|
|
config: resolvedConfig,
|
|
changes: [],
|
|
autoEnabledReasons: {
|
|
demo: ["demo configured"],
|
|
},
|
|
});
|
|
|
|
const context = resolvePluginRuntimeLoadContext({
|
|
config: rawConfig,
|
|
env,
|
|
});
|
|
|
|
expect(context).toEqual(
|
|
expect.objectContaining({
|
|
rawConfig,
|
|
config: resolvedConfig,
|
|
activationSourceConfig: rawConfig,
|
|
env,
|
|
workspaceDir: "/resolved-workspace",
|
|
autoEnabledReasons: {
|
|
demo: ["demo configured"],
|
|
},
|
|
}),
|
|
);
|
|
expect(applyPluginAutoEnableMock).toHaveBeenCalledWith({
|
|
config: rawConfig,
|
|
env,
|
|
});
|
|
expect(resolveDefaultAgentIdMock).toHaveBeenCalledWith(resolvedConfig);
|
|
expect(resolveAgentWorkspaceDirMock).toHaveBeenCalledWith(resolvedConfig, "default");
|
|
});
|
|
|
|
it("builds plugin load options from the shared runtime context", () => {
|
|
const context = resolvePluginRuntimeLoadContext({
|
|
config: { plugins: {} },
|
|
env: { HOME: "/tmp/openclaw-home" } as NodeJS.ProcessEnv,
|
|
workspaceDir: "/explicit-workspace",
|
|
});
|
|
|
|
expect(
|
|
buildPluginRuntimeLoadOptions(context, {
|
|
cache: false,
|
|
activate: false,
|
|
onlyPluginIds: ["demo"],
|
|
}),
|
|
).toEqual(
|
|
expect.objectContaining({
|
|
config: context.config,
|
|
activationSourceConfig: context.activationSourceConfig,
|
|
autoEnabledReasons: context.autoEnabledReasons,
|
|
workspaceDir: "/explicit-workspace",
|
|
env: context.env,
|
|
logger: context.logger,
|
|
cache: false,
|
|
activate: false,
|
|
onlyPluginIds: ["demo"],
|
|
}),
|
|
);
|
|
});
|
|
});
|