openclaw/extensions/telegram/src/bot-message-context.test-ha...

104 lines
3.6 KiB
TypeScript

import type { BuildTelegramMessageContextParams, TelegramMediaRef } from "./bot-message-context.js";
export const baseTelegramMessageContextConfig = {
agents: { defaults: { model: "anthropic/claude-opus-4-5", workspace: "/tmp/openclaw" } },
channels: { telegram: {} },
messages: { groupChat: { mentionPatterns: [] } },
} as never;
type BuildTelegramMessageContextForTestParams = {
message: Record<string, unknown>;
allMedia?: TelegramMediaRef[];
options?: BuildTelegramMessageContextParams["options"];
cfg?: Record<string, unknown>;
accountId?: string;
resolveGroupActivation?: BuildTelegramMessageContextParams["resolveGroupActivation"];
resolveGroupRequireMention?: BuildTelegramMessageContextParams["resolveGroupRequireMention"];
resolveTelegramGroupConfig?: BuildTelegramMessageContextParams["resolveTelegramGroupConfig"];
};
export async function buildTelegramMessageContextForTest(
params: BuildTelegramMessageContextForTestParams,
): Promise<
Awaited<ReturnType<typeof import("./bot-message-context.js").buildTelegramMessageContext>>
> {
const { vi } = await loadVitestModule();
const buildTelegramMessageContext = await loadBuildTelegramMessageContext();
return await buildTelegramMessageContext({
primaryCtx: {
message: {
message_id: 1,
date: 1_700_000_000,
text: "hello",
from: { id: 42, first_name: "Alice" },
...params.message,
},
me: { id: 7, username: "bot" },
} as never,
allMedia: params.allMedia ?? [],
storeAllowFrom: [],
options: params.options ?? {},
bot: {
api: {
sendChatAction: vi.fn(),
setMessageReaction: vi.fn(),
},
} as never,
cfg: (params.cfg ?? baseTelegramMessageContextConfig) as never,
loadFreshConfig: () => (params.cfg ?? baseTelegramMessageContextConfig) as never,
account: { accountId: params.accountId ?? "default" } as never,
historyLimit: 0,
groupHistories: new Map(),
dmPolicy: "open",
allowFrom: [],
groupAllowFrom: [],
ackReactionScope: "off",
logger: { info: vi.fn() },
resolveGroupActivation: params.resolveGroupActivation ?? (() => undefined),
resolveGroupRequireMention: params.resolveGroupRequireMention ?? (() => false),
resolveTelegramGroupConfig:
params.resolveTelegramGroupConfig ??
(() => ({
groupConfig: { requireMention: false },
topicConfig: undefined,
})),
sendChatActionHandler: { sendChatAction: vi.fn() } as never,
});
}
let buildTelegramMessageContextLoader:
| typeof import("./bot-message-context.js").buildTelegramMessageContext
| undefined;
let vitestModuleLoader: Promise<typeof import("vitest")> | undefined;
let messageContextMocksInstalled = false;
async function loadBuildTelegramMessageContext() {
await installMessageContextTestMocks();
if (!buildTelegramMessageContextLoader) {
({ buildTelegramMessageContext: buildTelegramMessageContextLoader } =
await import("./bot-message-context.js"));
}
return buildTelegramMessageContextLoader;
}
async function loadVitestModule() {
vitestModuleLoader ??= import("vitest");
return await vitestModuleLoader;
}
async function installMessageContextTestMocks() {
if (messageContextMocksInstalled) {
return;
}
const { vi } = await loadVitestModule();
vi.doMock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => {
const actual = await importOriginal<typeof import("openclaw/plugin-sdk/config-runtime")>();
return {
...actual,
readSessionUpdatedAt: () => undefined,
resolveStorePath: (storePath?: string) => storePath ?? "/tmp/sessions.json",
};
});
messageContextMocksInstalled = true;
}