From cb613022ff3048dd534d1950f4bf17b1aa368a64 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 13 May 2026 03:42:22 +0100 Subject: [PATCH] test: dedupe telegram send mock reads --- extensions/telegram/src/send.test.ts | 63 +++++++++++++++++++--------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/extensions/telegram/src/send.test.ts b/extensions/telegram/src/send.test.ts index e97e6ae698b..5c2e93093ad 100644 --- a/extensions/telegram/src/send.test.ts +++ b/extensions/telegram/src/send.test.ts @@ -110,8 +110,14 @@ function requireMockCall(call: T | undefined, label: string return call; } +function mockCall(mock: ReturnType, index: number, label: string): unknown[] { + const calls = mock.mock.calls; + const resolvedIndex = index < 0 ? calls.length + index : index; + return requireMockCall(calls[resolvedIndex], label); +} + function firstMockCall(mock: ReturnType, label: string): unknown[] { - return requireMockCall(mock.mock.calls.at(0), label); + return mockCall(mock, 0, label); } function requireString(value: unknown, label: string): string { @@ -121,6 +127,10 @@ function requireString(value: unknown, label: string): string { return value; } +function mockCallText(call: unknown[], label: string): string { + return requireString(call[1], label); +} + function requireRecord(value: unknown, label: string): Record { if (typeof value !== "object" || value === null) { throw new Error(`expected ${label}`); @@ -144,7 +154,7 @@ function expectMediaSendCall( function expectPersistedTarget(fields: Record): void { const [target] = requireMockCall( - maybePersistResolvedTelegramTarget.mock.calls.at(-1), + mockCall(maybePersistResolvedTelegramTarget, -1, "persisted Telegram target"), "persisted Telegram target", ); const record = requireRecord(target, "persisted Telegram target"); @@ -1985,10 +1995,15 @@ describe("sendMessageTelegram", () => { message_thread_id: 271, }, ); - expectMediaSendCall(sendPhoto.mock.calls.at(1), "second send photo call", chatId, { - caption: "photo", - parse_mode: "HTML", - }); + expectMediaSendCall( + mockCall(sendPhoto, 1, "second send photo call"), + "second send photo call", + chatId, + { + caption: "photo", + parse_mode: "HTML", + }, + ); expect(res.messageId).toBe("59"); }); @@ -2082,7 +2097,7 @@ describe("sendMessageTelegram", () => { expect(sendMessage).toHaveBeenCalledTimes(2); const firstCall = firstMockCall(sendMessage, "first sendMessage call"); - const secondCall = requireMockCall(sendMessage.mock.calls.at(1), "second sendMessage call"); + const secondCall = mockCall(sendMessage, 1, "second sendMessage call"); const firstParams = requireRecord(firstCall[2], "first sendMessage params"); const secondParams = requireRecord(secondCall[2], "second sendMessage params"); expect((firstCall[1] as string).length).toBeLessThanOrEqual(4000); @@ -2113,7 +2128,7 @@ describe("sendMessageTelegram", () => { expect(sendMessage).toHaveBeenCalledTimes(2); const firstCall = firstMockCall(sendMessage, "first sendMessage call"); - const secondCall = requireMockCall(sendMessage.mock.calls.at(1), "second sendMessage call"); + const secondCall = mockCall(sendMessage, 1, "second sendMessage call"); const firstParams = requireRecord(firstCall[2], "first sendMessage params"); const secondParams = requireRecord(secondCall[2], "second sendMessage params"); const firstText = requireString(firstCall[1], "first sendMessage text"); @@ -2155,9 +2170,15 @@ describe("sendMessageTelegram", () => { }); expect(sendMessage).toHaveBeenCalledTimes(4); - const plainFallbackCalls = [sendMessage.mock.calls.at(1), sendMessage.mock.calls.at(3)]; - expect(plainFallbackCalls.map((call) => String(call?.[1] ?? "")).join("")).toBe(plainText); - expect(plainFallbackCalls.map((call) => String(call?.[1] ?? "")).join("")).not.toContain("<"); + const plainFallbackCalls = [ + mockCall(sendMessage, 1, "first plain fallback sendMessage call"), + mockCall(sendMessage, 3, "second plain fallback sendMessage call"), + ]; + const plainFallbackText = plainFallbackCalls + .map((call) => mockCallText(call, "plain fallback text")) + .join(""); + expect(plainFallbackText).toBe(plainText); + expect(plainFallbackText).not.toContain("<"); expect(res.messageId).toBe("91"); }); @@ -2188,11 +2209,15 @@ describe("sendMessageTelegram", () => { expect( requireString(firstMockCall(sendMessage, "sendMessage call")[1], "sendMessage text"), ).toMatch(/^&/); - const plainFallbackCalls = [sendMessage.mock.calls.at(1), sendMessage.mock.calls.at(3)]; - expect(plainFallbackCalls.map((call) => String(call?.[1] ?? "")).join("")).toBe(plainText); - expect( - plainFallbackCalls.map((call) => String(call?.[1] ?? "")).filter((text) => text === ""), - ).toEqual([]); + const plainFallbackCalls = [ + mockCall(sendMessage, 1, "first plain fallback sendMessage call"), + mockCall(sendMessage, 3, "second plain fallback sendMessage call"), + ]; + const plainFallbackTexts = plainFallbackCalls.map((call) => + mockCallText(call, "plain fallback text"), + ); + expect(plainFallbackTexts.join("")).toBe(plainText); + expect(plainFallbackTexts.filter((text) => text === "")).toEqual([]); expect(res.messageId).toBe("93"); }); @@ -2749,7 +2774,7 @@ describe("editMessageTelegram", () => { if ("secondExpectReplyMarkup" in testCase && testCase.secondExpectReplyMarkup) { const secondParams = requireRecord( - (botApi.editMessageText.mock.calls.at(1) ?? [])[3], + mockCall(botApi.editMessageText, 1, "second editMessageText call")[3], "second edit params", ); expect(secondParams.reply_markup, testCase.name).toEqual(testCase.secondExpectReplyMarkup); @@ -2885,8 +2910,8 @@ describe("sendPollTelegram", () => { .message_thread_id, ).toBe(99); expect( - (api.sendPoll.mock.calls.at(1)?.[3] as { message_thread_id?: unknown } | undefined) - ?.message_thread_id, + (mockCall(api.sendPoll, 1, "second send poll call")[3] as { message_thread_id?: unknown }) + .message_thread_id, ).toBeUndefined(); });