mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 15:34:31 +00:00
test: speed up agent command suite with lightweight runtime mocks
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
import fs from "node:fs";
|
import fs from "node:fs";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { beforeEach, describe, expect, it, type MockInstance, vi } from "vitest";
|
import { beforeEach, describe, expect, it, type MockInstance, vi } from "vitest";
|
||||||
import { telegramPlugin } from "../../extensions/telegram/src/channel.js";
|
|
||||||
import { setTelegramRuntime } from "../../extensions/telegram/src/runtime.js";
|
|
||||||
import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js";
|
import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js";
|
||||||
import * as cliRunnerModule from "../agents/cli-runner.js";
|
import * as cliRunnerModule from "../agents/cli-runner.js";
|
||||||
import { loadModelCatalog } from "../agents/model-catalog.js";
|
import { loadModelCatalog } from "../agents/model-catalog.js";
|
||||||
@@ -12,9 +10,8 @@ import * as configModule from "../config/config.js";
|
|||||||
import * as sessionsModule from "../config/sessions.js";
|
import * as sessionsModule from "../config/sessions.js";
|
||||||
import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js";
|
import { emitAgentEvent, onAgentEvent } from "../infra/agent-events.js";
|
||||||
import { setActivePluginRegistry } from "../plugins/runtime.js";
|
import { setActivePluginRegistry } from "../plugins/runtime.js";
|
||||||
import { createPluginRuntime } from "../plugins/runtime/index.js";
|
|
||||||
import type { RuntimeEnv } from "../runtime.js";
|
import type { RuntimeEnv } from "../runtime.js";
|
||||||
import { createTestRegistry } from "../test-utils/channel-plugins.js";
|
import { createOutboundTestPlugin, createTestRegistry } from "../test-utils/channel-plugins.js";
|
||||||
import { agentCommand } from "./agent.js";
|
import { agentCommand } from "./agent.js";
|
||||||
|
|
||||||
vi.mock("../agents/pi-embedded.js", () => ({
|
vi.mock("../agents/pi-embedded.js", () => ({
|
||||||
@@ -33,6 +30,26 @@ vi.mock("../agents/model-selection.js", async (importOriginal) => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
vi.mock("../agents/auth-profiles.js", async (importOriginal) => {
|
||||||
|
const actual = await importOriginal<typeof import("../agents/auth-profiles.js")>();
|
||||||
|
return {
|
||||||
|
...actual,
|
||||||
|
ensureAuthProfileStore: vi.fn(() => ({ version: 1, profiles: {} })),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
vi.mock("../agents/workspace.js", () => ({
|
||||||
|
ensureAgentWorkspace: vi.fn(async ({ dir }: { dir: string }) => ({ dir })),
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("../agents/skills.js", () => ({
|
||||||
|
buildWorkspaceSkillSnapshot: vi.fn(() => undefined),
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("../agents/skills/refresh.js", () => ({
|
||||||
|
getSkillsSnapshotVersion: vi.fn(() => 0),
|
||||||
|
}));
|
||||||
|
|
||||||
const runtime: RuntimeEnv = {
|
const runtime: RuntimeEnv = {
|
||||||
log: vi.fn(),
|
log: vi.fn(),
|
||||||
error: vi.fn(),
|
error: vi.fn(),
|
||||||
@@ -80,6 +97,38 @@ function writeSessionStoreSeed(
|
|||||||
fs.writeFileSync(storePath, JSON.stringify(sessions, null, 2));
|
fs.writeFileSync(storePath, JSON.stringify(sessions, null, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createTelegramOutboundPlugin() {
|
||||||
|
return createOutboundTestPlugin({
|
||||||
|
id: "telegram",
|
||||||
|
outbound: {
|
||||||
|
deliveryMode: "direct",
|
||||||
|
sendText: async (ctx) => {
|
||||||
|
const sendTelegram = ctx.deps?.sendTelegram;
|
||||||
|
if (!sendTelegram) {
|
||||||
|
throw new Error("sendTelegram dependency missing");
|
||||||
|
}
|
||||||
|
const result = await sendTelegram(ctx.to, ctx.text, {
|
||||||
|
accountId: ctx.accountId ?? undefined,
|
||||||
|
verbose: false,
|
||||||
|
});
|
||||||
|
return { channel: "telegram", messageId: result.messageId, chatId: result.chatId };
|
||||||
|
},
|
||||||
|
sendMedia: async (ctx) => {
|
||||||
|
const sendTelegram = ctx.deps?.sendTelegram;
|
||||||
|
if (!sendTelegram) {
|
||||||
|
throw new Error("sendTelegram dependency missing");
|
||||||
|
}
|
||||||
|
const result = await sendTelegram(ctx.to, ctx.text, {
|
||||||
|
accountId: ctx.accountId ?? undefined,
|
||||||
|
mediaUrl: ctx.mediaUrl,
|
||||||
|
verbose: false,
|
||||||
|
});
|
||||||
|
return { channel: "telegram", messageId: result.messageId, chatId: result.chatId };
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
runCliAgentSpy.mockResolvedValue({
|
runCliAgentSpy.mockResolvedValue({
|
||||||
@@ -475,9 +524,10 @@ describe("agentCommand", () => {
|
|||||||
await withTempHome(async (home) => {
|
await withTempHome(async (home) => {
|
||||||
const store = path.join(home, "sessions.json");
|
const store = path.join(home, "sessions.json");
|
||||||
mockConfig(home, store, undefined, { botToken: "t-1" });
|
mockConfig(home, store, undefined, { botToken: "t-1" });
|
||||||
setTelegramRuntime(createPluginRuntime());
|
|
||||||
setActivePluginRegistry(
|
setActivePluginRegistry(
|
||||||
createTestRegistry([{ pluginId: "telegram", plugin: telegramPlugin, source: "test" }]),
|
createTestRegistry([
|
||||||
|
{ pluginId: "telegram", plugin: createTelegramOutboundPlugin(), source: "test" },
|
||||||
|
]),
|
||||||
);
|
);
|
||||||
const deps = {
|
const deps = {
|
||||||
sendMessageWhatsApp: vi.fn(),
|
sendMessageWhatsApp: vi.fn(),
|
||||||
|
|||||||
Reference in New Issue
Block a user