From eeeacadb368b60af99e6f6a4f377ffeaeb7dff2e Mon Sep 17 00:00:00 2001 From: Muhammed Mukhthar CM Date: Mon, 26 Jan 2026 06:59:15 +0000 Subject: [PATCH] telegram-user: add outbound media/capabilities tests --- extensions/telegram-user/src/channel.test.ts | 78 ++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 extensions/telegram-user/src/channel.test.ts diff --git a/extensions/telegram-user/src/channel.test.ts b/extensions/telegram-user/src/channel.test.ts new file mode 100644 index 000000000..e114a2312 --- /dev/null +++ b/extensions/telegram-user/src/channel.test.ts @@ -0,0 +1,78 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import type { ClawdbotConfig } from "clawdbot/plugin-sdk"; + +const sendMediaTelegramUser = vi.fn< + typeof import("./send.js").sendMediaTelegramUser +>(); + +vi.mock("./send.js", () => { + return { + looksLikeTelegramUserTargetId: () => true, + normalizeTelegramUserMessagingTarget: (raw: string) => raw, + sendMessageTelegramUser: vi.fn(async () => ({ messageId: "m1", chatId: "c1" })), + sendPollTelegramUser: vi.fn(async () => ({ messageId: "m2", chatId: "c2" })), + sendMediaTelegramUser, + }; +}); + +describe("telegram-user channel plugin", () => { + beforeEach(() => { + sendMediaTelegramUser.mockReset(); + }); + + it("declares thread/reaction capabilities consistent with handler behavior", async () => { + const mod = await import("./channel.js"); + expect(mod.telegramUserPlugin.capabilities?.reactions).toBe(true); + expect(mod.telegramUserPlugin.capabilities?.threads).toBe(true); + expect(mod.telegramUserPlugin.capabilities?.chatTypes).toContain("thread"); + }); + + it("enforces mediaMaxMb in outbound sendMedia", async () => { + sendMediaTelegramUser.mockResolvedValue({ messageId: "m3", chatId: "c3" }); + + const cfg = { + channels: { + "telegram-user": { + mediaMaxMb: 7, + }, + }, + } satisfies Partial as unknown as ClawdbotConfig; + + const mod = await import("./channel.js"); + await mod.telegramUserPlugin.outbound?.sendMedia?.({ + cfg, + to: "telegram-user:123", + text: "hello", + mediaUrl: "file:///tmp/example.jpg", + accountId: "default", + }); + + expect(sendMediaTelegramUser).toHaveBeenCalledTimes(1); + const [, , opts] = sendMediaTelegramUser.mock.calls[0] ?? []; + expect(opts?.maxBytes).toBe(7 * 1024 * 1024); + }); + + it("omits maxBytes when mediaMaxMb is not configured", async () => { + sendMediaTelegramUser.mockResolvedValue({ messageId: "m4", chatId: "c4" }); + + const cfg = { + channels: { + "telegram-user": {}, + }, + } satisfies Partial as unknown as ClawdbotConfig; + + const mod = await import("./channel.js"); + await mod.telegramUserPlugin.outbound?.sendMedia?.({ + cfg, + to: "telegram-user:123", + text: "hello", + mediaUrl: "file:///tmp/example.jpg", + accountId: "default", + }); + + expect(sendMediaTelegramUser).toHaveBeenCalledTimes(1); + const [, , opts] = sendMediaTelegramUser.mock.calls[0] ?? []; + expect(opts).not.toHaveProperty("maxBytes"); + }); +});