test: trim extension partial mocks

This commit is contained in:
Peter Steinberger
2026-04-03 19:27:52 +01:00
parent 24a4ed1013
commit 6eca4e0136
20 changed files with 120 additions and 71 deletions

View File

@@ -4,8 +4,10 @@ import { createDiscordRestClient } from "./client.js";
const makeProxyFetchMock = vi.hoisted(() => vi.fn());
vi.mock("openclaw/plugin-sdk/infra-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/infra-runtime")>();
vi.mock("openclaw/plugin-sdk/infra-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/infra-runtime")>(
"openclaw/plugin-sdk/infra-runtime",
);
makeProxyFetchMock.mockImplementation((proxyUrl: string) => {
if (proxyUrl === "bad-proxy") {
throw new Error("bad proxy");

View File

@@ -21,8 +21,10 @@ const runtimeModuleMocks = vi.hoisted(() => ({
dispatchReplyWithDispatcher: vi.fn(),
}));
vi.mock("openclaw/plugin-sdk/plugin-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/plugin-runtime")>();
vi.mock("openclaw/plugin-sdk/plugin-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/plugin-runtime")>(
"openclaw/plugin-sdk/plugin-runtime",
);
return {
...actual,
matchPluginCommand: (...args: unknown[]) => runtimeModuleMocks.matchPluginCommand(...args),
@@ -30,8 +32,10 @@ vi.mock("openclaw/plugin-sdk/plugin-runtime", async (importOriginal) => {
};
});
vi.mock("openclaw/plugin-sdk/reply-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/reply-runtime")>();
vi.mock("openclaw/plugin-sdk/reply-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/reply-runtime")>(
"openclaw/plugin-sdk/reply-runtime",
);
return {
...actual,
dispatchReplyWithDispatcher: (...args: unknown[]) =>

View File

@@ -36,8 +36,8 @@ const retryAsyncMock = vi.hoisted(() =>
),
);
vi.mock("../send.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../send.js")>();
vi.mock("../send.js", async () => {
const actual = await vi.importActual<typeof import("../send.js")>("../send.js");
return {
...actual,
sendMessageDiscord: (...args: unknown[]) => sendMessageDiscordMock(...args),
@@ -50,8 +50,10 @@ vi.mock("../send.shared.js", () => ({
sendDiscordText: (...args: unknown[]) => sendDiscordTextMock(...args),
}));
vi.mock("openclaw/plugin-sdk/retry-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/retry-runtime")>();
vi.mock("openclaw/plugin-sdk/retry-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/retry-runtime")>(
"openclaw/plugin-sdk/retry-runtime",
);
return {
...actual,
retryAsync: retryAsyncMock,

View File

@@ -3,16 +3,20 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite
const recordChannelActivityMock = vi.hoisted(() => vi.fn());
const loadConfigMock = vi.hoisted(() => vi.fn(() => ({ channels: { discord: {} } })));
vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/config-runtime")>();
vi.mock("openclaw/plugin-sdk/config-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/config-runtime")>(
"openclaw/plugin-sdk/config-runtime",
);
return {
...actual,
loadConfig: () => loadConfigMock(),
};
});
vi.mock("../../../src/infra/channel-activity.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../../../src/infra/channel-activity.js")>();
vi.mock("../../../src/infra/channel-activity.js", async () => {
const actual = await vi.importActual<typeof import("../../../src/infra/channel-activity.js")>(
"../../../src/infra/channel-activity.js",
);
return {
...actual,
recordChannelActivity: (...args: unknown[]) => recordChannelActivityMock(...args),

View File

@@ -3,13 +3,13 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const runFfprobeMock = vi.hoisted(() => vi.fn<(...args: unknown[]) => Promise<string>>());
const runFfmpegMock = vi.hoisted(() => vi.fn<(...args: unknown[]) => Promise<void>>());
vi.mock("openclaw/plugin-sdk/temp-path", async (importOriginal) => {
vi.mock("openclaw/plugin-sdk/temp-path", async () => {
return {
resolvePreferredOpenClawTmpDir: () => "/tmp",
};
});
vi.mock("openclaw/plugin-sdk/media-runtime", async (importOriginal) => {
vi.mock("openclaw/plugin-sdk/media-runtime", async () => {
return {
runFfprobe: runFfprobeMock,
runFfmpeg: runFfmpegMock,

View File

@@ -87,16 +87,20 @@ vi.mock("./sdk-runtime.js", () => ({
}),
}));
vi.mock("openclaw/plugin-sdk/routing", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/routing")>();
vi.mock("openclaw/plugin-sdk/routing", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/routing")>(
"openclaw/plugin-sdk/routing",
);
return {
...actual,
resolveAgentRoute: resolveAgentRouteMock,
};
});
vi.mock("openclaw/plugin-sdk/agent-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/agent-runtime")>();
vi.mock("openclaw/plugin-sdk/agent-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/agent-runtime")>(
"openclaw/plugin-sdk/agent-runtime",
);
return {
...actual,
agentCommandFromIngress: agentCommandMock,

View File

@@ -289,8 +289,10 @@ vi.mock("./client.js", () => ({
createFeishuClient: mockCreateFeishuClient,
}));
vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/conversation-runtime")>();
vi.mock("openclaw/plugin-sdk/conversation-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/conversation-runtime")>(
"openclaw/plugin-sdk/conversation-runtime",
);
return {
...actual,
resolveConfiguredBindingRoute: (params: unknown) =>

View File

@@ -32,8 +32,8 @@ vi.mock("./targets.js", () => ({
resolveGoogleChatOutboundSpace,
}));
vi.mock("../runtime-api.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../runtime-api.js")>();
vi.mock("../runtime-api.js", async () => {
const actual = await vi.importActual<typeof import("../runtime-api.js")>("../runtime-api.js");
return {
...actual,
loadOutboundMediaFromUrl: (...args: Parameters<typeof actual.loadOutboundMediaFromUrl>) =>

View File

@@ -21,8 +21,8 @@ vi.mock("google-auth-library", () => ({
},
}));
vi.mock("./auth.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("./auth.js")>();
vi.mock("./auth.js", async () => {
const actual = await vi.importActual<typeof import("./auth.js")>("./auth.js");
return {
...actual,
getGoogleChatAccessToken: mocks.getGoogleChatAccessToken,

View File

@@ -25,8 +25,8 @@ const getIMessageSetupStatus = createPluginSetupWizardStatus(imessagePlugin);
const spawnMock = vi.hoisted(() => vi.fn());
vi.mock("node:child_process", async (importOriginal) => {
const actual = await importOriginal<typeof import("node:child_process")>();
vi.mock("node:child_process", async () => {
const actual = await vi.importActual<typeof import("node:child_process")>("node:child_process");
return {
...actual,
spawn: (...args: unknown[]) => spawnMock(...args),

View File

@@ -40,16 +40,22 @@ vi.mock("./protocol.js", async () => {
};
});
vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => {
const original = (await importOriginal()) as Record<string, unknown>;
vi.mock("openclaw/plugin-sdk/config-runtime", async () => {
const original = (await vi.importActual("openclaw/plugin-sdk/config-runtime")) as Record<
string,
unknown
>;
return {
...original,
resolveMarkdownTableMode: hoisted.resolveMarkdownTableMode,
};
});
vi.mock("openclaw/plugin-sdk/text-runtime", async (importOriginal) => {
const original = (await importOriginal()) as Record<string, unknown>;
vi.mock("openclaw/plugin-sdk/text-runtime", async () => {
const original = (await vi.importActual("openclaw/plugin-sdk/text-runtime")) as Record<
string,
unknown
>;
return {
...original,
convertMarkdownTables: hoisted.convertMarkdownTables,

View File

@@ -5,8 +5,10 @@ import type { LineAccountConfig } from "./types.js";
// Avoid pulling in globals/pairing/media dependencies; this suite only asserts
// allowlist/groupPolicy gating and message-context wiring.
vi.mock("openclaw/plugin-sdk/runtime-env", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/runtime-env")>();
vi.mock("openclaw/plugin-sdk/runtime-env", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/runtime-env")>(
"openclaw/plugin-sdk/runtime-env",
);
return {
...actual,
danger: (text: string) => text,
@@ -20,8 +22,10 @@ const { readAllowFromStoreMock, upsertPairingRequestMock } = vi.hoisted(() => ({
upsertPairingRequestMock: vi.fn(async () => ({ code: "CODE", created: true })),
}));
vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/conversation-runtime")>();
vi.mock("openclaw/plugin-sdk/conversation-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/conversation-runtime")>(
"openclaw/plugin-sdk/conversation-runtime",
);
return {
...actual,
resolvePairingIdLabel: () => "lineUserId",

View File

@@ -63,8 +63,10 @@ vi.mock("openclaw/plugin-sdk/infra-runtime", () => ({
recordChannelActivity: recordChannelActivityMock,
}));
vi.mock("openclaw/plugin-sdk/runtime-env", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/runtime-env")>();
vi.mock("openclaw/plugin-sdk/runtime-env", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/runtime-env")>(
"openclaw/plugin-sdk/runtime-env",
);
return {
...actual,
logVerbose: logVerboseMock,

View File

@@ -99,8 +99,8 @@ vi.mock("openclaw/plugin-sdk/memory-core-host-engine-foundation", async () => {
};
});
vi.mock("node:child_process", async (importOriginal) => {
const actual = await importOriginal<typeof import("node:child_process")>();
vi.mock("node:child_process", async () => {
const actual = await vi.importActual<typeof import("node:child_process")>("node:child_process");
return {
...actual,
spawn: vi.fn(),
@@ -112,8 +112,10 @@ vi.mock("chokidar", () => ({
watch: watchMock,
}));
vi.mock("openclaw/plugin-sdk/file-lock", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/file-lock")>();
vi.mock("openclaw/plugin-sdk/file-lock", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/file-lock")>(
"openclaw/plugin-sdk/file-lock",
);
return {
...actual,
withFileLock: withFileLockMock,

View File

@@ -26,16 +26,18 @@ const slackBlockTestState = vi.hoisted(() => ({
config: {},
}));
vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/config-runtime")>();
vi.mock("openclaw/plugin-sdk/config-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/config-runtime")>(
"openclaw/plugin-sdk/config-runtime",
);
return {
...actual,
loadConfig: () => slackBlockTestState.config,
};
});
vi.mock("./accounts.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("./accounts.js")>();
vi.mock("./accounts.js", async () => {
const actual = await vi.importActual<typeof import("./accounts.js")>("./accounts.js");
return {
...actual,
resolveSlackAccount: () => slackBlockTestState.account,

View File

@@ -7,10 +7,10 @@ import {
const messageQueueMock = vi.fn();
const messageAllowMock = vi.fn();
async function createChannelRuntimeMock(
importOriginal: () => Promise<typeof import("openclaw/plugin-sdk/infra-runtime")>,
) {
const actual = await importOriginal();
async function createChannelRuntimeMock() {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/infra-runtime")>(
"openclaw/plugin-sdk/infra-runtime",
);
return {
...actual,
enqueueSystemEvent: (...args: unknown[]) => messageQueueMock(...args),
@@ -20,8 +20,10 @@ async function createChannelRuntimeMock(
vi.mock("openclaw/plugin-sdk/infra-runtime", createChannelRuntimeMock);
vi.mock("openclaw/plugin-sdk/infra-runtime.js", createChannelRuntimeMock);
vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/conversation-runtime")>();
vi.mock("openclaw/plugin-sdk/conversation-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/conversation-runtime")>(
"openclaw/plugin-sdk/conversation-runtime",
);
return {
...actual,
readChannelAllowFromStore: (...args: unknown[]) => messageAllowMock(...args),

View File

@@ -64,8 +64,10 @@ const conversationStoreMocks = vi.hoisted(() => ({
upsertChannelPairingRequest: vi.fn(async () => ({ code: "PAIRCODE", created: true })),
}));
vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/conversation-runtime")>();
vi.mock("openclaw/plugin-sdk/conversation-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/conversation-runtime")>(
"openclaw/plugin-sdk/conversation-runtime",
);
return {
...actual,
resolveConfiguredBindingRoute: persistentBindingMocks.resolveConfiguredBindingRoute,
@@ -104,8 +106,10 @@ vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => {
}),
};
});
vi.mock("./bot-native-commands.runtime.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("./bot-native-commands.runtime.js")>();
vi.mock("./bot-native-commands.runtime.js", async () => {
const actual = await vi.importActual<typeof import("./bot-native-commands.runtime.js")>(
"./bot-native-commands.runtime.js",
);
return {
...actual,
finalizeInboundContext: vi.fn((ctx: unknown) => ctx),

View File

@@ -13,32 +13,35 @@ const listTelegramAccountIdsMock = vi.hoisted(() => vi.fn());
const inspectTelegramAccountMock = vi.hoisted(() => vi.fn());
const lookupTelegramChatIdMock = vi.hoisted(() => vi.fn());
vi.mock("openclaw/plugin-sdk/runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/runtime")>();
vi.mock("openclaw/plugin-sdk/runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/runtime")>(
"openclaw/plugin-sdk/runtime",
);
return {
...actual,
resolveCommandSecretRefsViaGateway: resolveCommandSecretRefsViaGatewayMock,
};
});
vi.mock("./accounts.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("./accounts.js")>();
vi.mock("./accounts.js", async () => {
const actual = await vi.importActual<typeof import("./accounts.js")>("./accounts.js");
return {
...actual,
listTelegramAccountIds: listTelegramAccountIdsMock,
};
});
vi.mock("./account-inspect.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("./account-inspect.js")>();
vi.mock("./account-inspect.js", async () => {
const actual =
await vi.importActual<typeof import("./account-inspect.js")>("./account-inspect.js");
return {
...actual,
inspectTelegramAccount: inspectTelegramAccountMock,
};
});
vi.mock("./api-fetch.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("./api-fetch.js")>();
vi.mock("./api-fetch.js", async () => {
const actual = await vi.importActual<typeof import("./api-fetch.js")>("./api-fetch.js");
return {
...actual,
lookupTelegramChatId: lookupTelegramChatIdMock,

View File

@@ -261,7 +261,7 @@ async function monitorWithAutoAbort(opts: Omit<MonitorTelegramOpts, "abortSignal
});
}
vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => {
vi.mock("openclaw/plugin-sdk/config-runtime", async () => {
return {
loadConfig,
resolveAgentMaxConcurrent: (cfg: { agents?: { defaults?: { maxConcurrent?: number } } }) =>
@@ -306,8 +306,10 @@ vi.mock("@grammyjs/runner", () => ({
run: runSpy,
}));
vi.mock("openclaw/plugin-sdk/runtime-env", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/runtime-env")>();
vi.mock("openclaw/plugin-sdk/runtime-env", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/runtime-env")>(
"openclaw/plugin-sdk/runtime-env",
);
return {
...actual,
computeBackoff,

View File

@@ -4,8 +4,10 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import { loadWebMedia } from "../media.js";
import type { WebInboundMsg } from "./types.js";
vi.mock("openclaw/plugin-sdk/runtime-env", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/runtime-env")>();
vi.mock("openclaw/plugin-sdk/runtime-env", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/runtime-env")>(
"openclaw/plugin-sdk/runtime-env",
);
return {
...actual,
shouldLogVerbose: vi.fn(() => true),
@@ -13,8 +15,10 @@ vi.mock("openclaw/plugin-sdk/runtime-env", async (importOriginal) => {
};
});
vi.mock("openclaw/plugin-sdk/text-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/text-runtime")>();
vi.mock("openclaw/plugin-sdk/text-runtime", async () => {
const actual = await vi.importActual<typeof import("openclaw/plugin-sdk/text-runtime")>(
"openclaw/plugin-sdk/text-runtime",
);
return {
...actual,
sleep: vi.fn(async () => {}),