Spaces:
Sleeping
Sleeping
| import { beforeEach, describe, expect, it, vi } from "vitest"; | |
| const createTelegramDraftStream = vi.hoisted(() => vi.fn()); | |
| const dispatchReplyWithBufferedBlockDispatcher = vi.hoisted(() => vi.fn()); | |
| const deliverReplies = vi.hoisted(() => vi.fn()); | |
| vi.mock("./draft-stream.js", () => ({ | |
| createTelegramDraftStream, | |
| })); | |
| vi.mock("../auto-reply/reply/provider-dispatcher.js", () => ({ | |
| dispatchReplyWithBufferedBlockDispatcher, | |
| })); | |
| vi.mock("./bot/delivery.js", () => ({ | |
| deliverReplies, | |
| })); | |
| vi.mock("./sticker-cache.js", () => ({ | |
| cacheSticker: vi.fn(), | |
| describeStickerImage: vi.fn(), | |
| })); | |
| import { dispatchTelegramMessage } from "./bot-message-dispatch.js"; | |
| describe("dispatchTelegramMessage draft streaming", () => { | |
| beforeEach(() => { | |
| createTelegramDraftStream.mockReset(); | |
| dispatchReplyWithBufferedBlockDispatcher.mockReset(); | |
| deliverReplies.mockReset(); | |
| }); | |
| it("streams drafts in private threads and forwards thread id", async () => { | |
| const draftStream = { | |
| update: vi.fn(), | |
| flush: vi.fn().mockResolvedValue(undefined), | |
| stop: vi.fn(), | |
| }; | |
| createTelegramDraftStream.mockReturnValue(draftStream); | |
| dispatchReplyWithBufferedBlockDispatcher.mockImplementation( | |
| async ({ dispatcherOptions, replyOptions }) => { | |
| await replyOptions?.onPartialReply?.({ text: "Hello" }); | |
| await dispatcherOptions.deliver({ text: "Hello" }, { kind: "final" }); | |
| return { queuedFinal: true }; | |
| }, | |
| ); | |
| deliverReplies.mockResolvedValue({ delivered: true }); | |
| const resolveBotTopicsEnabled = vi.fn().mockResolvedValue(true); | |
| const context = { | |
| ctxPayload: {}, | |
| primaryCtx: { message: { chat: { id: 123, type: "private" } } }, | |
| msg: { | |
| chat: { id: 123, type: "private" }, | |
| message_id: 456, | |
| message_thread_id: 777, | |
| }, | |
| chatId: 123, | |
| isGroup: false, | |
| resolvedThreadId: undefined, | |
| replyThreadId: 777, | |
| historyKey: undefined, | |
| historyLimit: 0, | |
| groupHistories: new Map(), | |
| route: { agentId: "default", accountId: "default" }, | |
| skillFilter: undefined, | |
| sendTyping: vi.fn(), | |
| sendRecordVoice: vi.fn(), | |
| ackReactionPromise: null, | |
| reactionApi: null, | |
| removeAckAfterReply: false, | |
| }; | |
| await dispatchTelegramMessage({ | |
| context, | |
| bot: { api: {} }, | |
| cfg: {}, | |
| runtime: {}, | |
| replyToMode: "first", | |
| streamMode: "partial", | |
| textLimit: 4096, | |
| telegramCfg: {}, | |
| opts: {}, | |
| resolveBotTopicsEnabled, | |
| }); | |
| expect(resolveBotTopicsEnabled).toHaveBeenCalledWith(context.primaryCtx); | |
| expect(createTelegramDraftStream).toHaveBeenCalledWith( | |
| expect.objectContaining({ | |
| chatId: 123, | |
| messageThreadId: 777, | |
| }), | |
| ); | |
| expect(draftStream.update).toHaveBeenCalledWith("Hello"); | |
| expect(deliverReplies).toHaveBeenCalledWith( | |
| expect.objectContaining({ | |
| messageThreadId: 777, | |
| }), | |
| ); | |
| }); | |
| }); | |