From e7d069edcf0df4da827565f040222d3391c7c2c0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 26 Apr 2026 22:43:54 +0100 Subject: [PATCH] test(qa): relax telegram mention reply assertion (cherry picked from commit 710925131843417b9ed2074c867fcbbd450f73a2) --- .../telegram/telegram-live.runtime.test.ts | 21 +++++++++++++++++++ .../telegram/telegram-live.runtime.ts | 20 ++++++++++-------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts index 6ab4c7ce061..7b83a00526c 100644 --- a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts +++ b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts @@ -376,6 +376,27 @@ describe("telegram live qa runtime", () => { matchText: "TELEGRAM_QA_NOMENTION_TOKEN", }), ).toBe(false); + expect( + __testing.matchesTelegramScenarioReply({ + allowAnySutReply: true, + groupId: "-100123", + sentMessageId: 55, + sutBotId: 88, + message: { + updateId: 3, + messageId: 12, + chatId: -100123, + senderId: 88, + senderIsBot: true, + senderUsername: "sut_bot", + text: "Protocol note: acknowledged.", + replyToMessageId: undefined, + timestamp: 1_700_000_003_000, + inlineButtons: [], + mediaKinds: [], + }, + }), + ).toBe(true); }); it("validates expected Telegram reply markers", () => { diff --git a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts index ccd4ce75abd..6d287ace2f8 100644 --- a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts +++ b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts @@ -51,6 +51,7 @@ type TelegramQaScenarioId = | "telegram-mention-gating"; type TelegramQaScenarioRun = { + allowAnySutReply?: boolean; expectReply: boolean; input: string; expectedTextIncludes?: string[]; @@ -268,15 +269,11 @@ const TELEGRAM_QA_SCENARIOS: TelegramQaScenarioDefinition[] = [ id: "telegram-mentioned-message-reply", title: "Telegram mentioned message gets a reply", timeoutMs: 45_000, - buildRun: (sutUsername) => { - const token = `TELEGRAM_QA_REPLY_${randomUUID().slice(0, 8).toUpperCase()}`; - return { - expectReply: true, - input: `@${sutUsername} reply with only this exact marker: ${token}`, - expectedTextIncludes: [token], - matchText: token, - }; - }, + buildRun: (sutUsername) => ({ + allowAnySutReply: true, + expectReply: true, + input: `@${sutUsername} Telegram QA mention routing check. Reply with a short acknowledgement.`, + }), }, { id: "telegram-mention-gating", @@ -758,6 +755,7 @@ function findScenario(ids?: string[]) { function matchesTelegramScenarioReply(params: { groupId: string; + allowAnySutReply?: boolean; matchText?: string; message: TelegramObservedMessage; sentMessageId: number; @@ -772,6 +770,9 @@ function matchesTelegramScenarioReply(params: { if (params.message.replyToMessageId === params.sentMessageId) { return true; } + if (params.allowAnySutReply === true) { + return true; + } return Boolean(params.matchText && params.message.text.includes(params.matchText)); } @@ -1223,6 +1224,7 @@ export async function runTelegramQaLive(params: { observationScenarioTitle: scenario.title, predicate: (message) => matchesTelegramScenarioReply({ + allowAnySutReply: scenarioRun.allowAnySutReply, groupId: runtimeEnv.groupId, matchText: scenarioRun.matchText, message,