import { beforeEach, describe, expect, it, vi } from "vitest"; const buildTelegramMessageContext = vi.hoisted(() => vi.fn()); const dispatchTelegramMessage = vi.hoisted(() => vi.fn()); vi.mock("./bot-message-context.js", () => ({ buildTelegramMessageContext, })); vi.mock("./bot-message-dispatch.js", () => ({ dispatchTelegramMessage, })); import { createTelegramMessageProcessor } from "./bot-message.js"; describe("telegram bot message processor", () => { beforeEach(() => { buildTelegramMessageContext.mockReset(); dispatchTelegramMessage.mockReset(); }); const baseDeps = { bot: {}, cfg: {}, account: {}, telegramCfg: {}, historyLimit: 0, groupHistories: {}, dmPolicy: {}, allowFrom: [], groupAllowFrom: [], ackReactionScope: "none", logger: {}, resolveGroupActivation: () => true, resolveGroupRequireMention: () => false, resolveTelegramGroupConfig: () => ({}), runtime: {}, replyToMode: "auto", streamMode: "auto", textLimit: 4096, opts: {}, resolveBotTopicsEnabled: () => false, }; it("dispatches when context is available", async () => { buildTelegramMessageContext.mockResolvedValue({ route: { sessionKey: "agent:main:main" } }); const processMessage = createTelegramMessageProcessor(baseDeps); await processMessage({ message: { chat: { id: 123 }, message_id: 456 } }, [], [], {}); expect(dispatchTelegramMessage).toHaveBeenCalledTimes(1); }); it("skips dispatch when no context is produced", async () => { buildTelegramMessageContext.mockResolvedValue(null); const processMessage = createTelegramMessageProcessor(baseDeps); await processMessage({ message: { chat: { id: 123 }, message_id: 456 } }, [], [], {}); expect(dispatchTelegramMessage).not.toHaveBeenCalled(); }); });