From d0dacf3ec0fdc8fcf83f6d43a2fbbd8939350430 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 13 Jul 2026 15:47:58 -0700 Subject: [PATCH] test(telegram): cover sender-less channel post fragments (#106854) (cherry picked from commit a81bb12fc29d8f1ed7df05326054616a3a3f6604) --- .../src/bot.create-telegram-bot.test.ts | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/extensions/telegram/src/bot.create-telegram-bot.test.ts b/extensions/telegram/src/bot.create-telegram-bot.test.ts index e35ddf65ce1f..4c400e6f9b79 100644 --- a/extensions/telegram/src/bot.create-telegram-bot.test.ts +++ b/extensions/telegram/src/bot.create-telegram-bot.test.ts @@ -1562,6 +1562,47 @@ describe("createTelegramBot", () => { ); }); + it("normalizes sender-less channel posts before fragment classification", async () => { + loadConfig.mockReturnValue({ + channels: { + telegram: { + dmPolicy: "open", + allowFrom: ["*"], + groupPolicy: "open", + groups: { "*": { requireMention: false } }, + }, + }, + }); + createTelegramBot({ token: "tok", testTimings: TELEGRAM_TEST_TIMINGS }); + const handler = getOnHandler("channel_post") as (ctx: Record) => Promise; + const channelPostBase = { + chat: { id: -9_876_543_233, type: "channel", title: "Sender-less channel" }, + date: 1_736_380_800, + }; + const contextBase = { + me: { id: 7_654_321_000, username: "openclaw_bot" }, + getFile: async () => null, + }; + + await handler({ + ...contextBase, + channelPost: { + ...channelPostBase, + message_id: 1, + text: "channel-start".padEnd(4_000, "A"), + }, + }); + await handler({ + ...contextBase, + channelPost: { ...channelPostBase, message_id: 2, text: "channel-tail" }, + }); + + await vi.waitFor(() => expect(replySpy).toHaveBeenCalledTimes(1)); + expect(replySpy.mock.calls[0]?.[0].BodyForAgent).toBe( + `${"channel-start".padEnd(4_000, "A")}channel-tail`, + ); + }); + it("keeps peer-bot abort controls out of buffered text fragments", async () => { loadConfig.mockReturnValue({ commands: { native: false },