From 45a8a2594771237dc76eb901a3e20de24531a926 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 14:07:05 +0100 Subject: [PATCH] test: dedupe telegram media e2e mock calls --- ...dia-file-path-no-file-download.e2e.test.ts | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/extensions/telegram/src/bot.media.downloads-media-file-path-no-file-download.e2e.test.ts b/extensions/telegram/src/bot.media.downloads-media-file-path-no-file-download.e2e.test.ts index 54e1793659c..d7d11735561 100644 --- a/extensions/telegram/src/bot.media.downloads-media-file-path-no-file-download.e2e.test.ts +++ b/extensions/telegram/src/bot.media.downloads-media-file-path-no-file-download.e2e.test.ts @@ -10,6 +10,30 @@ import { watchTelegramFetch, } from "./bot.media.test-utils.js"; +type ReplyPayload = { Body: string; MediaPaths?: string[] } & Record; + +function replyPayload(replySpy: ReturnType, index = 0): ReplyPayload { + const payload = replySpy.mock.calls.at(index)?.at(0); + if (typeof payload !== "object" || payload === null) { + throw new Error(`expected reply payload ${index}`); + } + return payload as ReplyPayload; +} + +function downloadRequest( + fetchSpy: ReturnType, + index: number, +): { + filePathHint?: string; + url?: string; +} { + const request = fetchSpy.mock.calls.at(index)?.at(0); + if (typeof request !== "object" || request === null) { + throw new Error(`expected download request ${index}`); + } + return request as { filePathHint?: string; url?: string }; +} + describe("telegram inbound media", () => { // Parallel vitest shards can make this suite slower than the standalone run. const INBOUND_MEDIA_TEST_TIMEOUT_MS = process.platform === "win32" ? 120_000 : 90_000; @@ -46,7 +70,7 @@ describe("telegram inbound media", () => { expect(downloadRequest?.url).toBe("https://api.telegram.org/file/bottok/photos/1.jpg"); expect(downloadRequest?.filePathHint).toBe("photos/1.jpg"); expect(params.replySpy).toHaveBeenCalledTimes(1); - const payload = params.replySpy.mock.calls[0][0]; + const payload = replyPayload(params.replySpy); expect(payload.Body).toContain(""); }, }, @@ -120,7 +144,7 @@ describe("telegram inbound media", () => { expect(runtimeError).not.toHaveBeenCalled(); expect(replySpy).toHaveBeenCalledTimes(1); - const payload = replySpy.mock.calls[0]?.[0] as { Body?: string; MediaPaths?: string[] }; + const payload = replyPayload(replySpy); expect(payload.Body).toContain(""); expect(payload.MediaPaths).toContain(inboundPath); } finally { @@ -222,7 +246,7 @@ describe("telegram inbound media", () => { }); expect(replySpy).toHaveBeenCalledTimes(1); - const payload = replySpy.mock.calls[0][0] as Record; + const payload = replyPayload(replySpy); testCase.assert(payload); } }); @@ -292,8 +316,8 @@ describe("telegram media groups", () => { ); expect(runtimeError).not.toHaveBeenCalled(); - const firstDownloadRequest = fetchSpy.mock.calls[0]?.[0] as { url?: string } | undefined; - const secondDownloadRequest = fetchSpy.mock.calls[1]?.[0] as { url?: string } | undefined; + const firstDownloadRequest = downloadRequest(fetchSpy, 0); + const secondDownloadRequest = downloadRequest(fetchSpy, 1); expect(firstDownloadRequest?.url).toBe( "http://127.0.0.1:8081/custom-bot-api/file/bottok/photos/photo1.jpg", ); @@ -341,7 +365,7 @@ describe("telegram media groups", () => { ], expectedReplyCount: 1, assert: (replySpy: ReturnType) => { - const payload = replySpy.mock.calls[0]?.[0]; + const payload = replyPayload(replySpy); expect(payload?.Body).toContain("Here are my photos"); expect(payload?.MediaPaths).toHaveLength(2); }, @@ -452,7 +476,7 @@ describe("telegram forwarded bursts", () => { }); expect(runtimeError).not.toHaveBeenCalled(); - const payload = replySpy.mock.calls[0][0]; + const payload = replyPayload(replySpy); expect(payload.Body).toContain("Look at this"); expect(payload.MediaPaths).toHaveLength(1); } finally {