diff --git a/extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts b/extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts index d756fe9c7ac7..ac006e7e0799 100644 --- a/extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts +++ b/extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts @@ -34,6 +34,7 @@ import { redactQaLiveLaneIssues, } from "../shared/live-artifacts.js"; import { startQaLiveLaneGateway } from "../shared/live-gateway.runtime.js"; +import { assertLiveScenarioReply as assertDiscordScenarioReply } from "../shared/live-scenario-reply.js"; import { collectLiveTransportStandardScenarioCoverage, selectLiveTransportScenarios, @@ -1478,22 +1479,6 @@ function matchesDiscordScenarioReply(params: { ); } -function assertDiscordScenarioReply(params: { - expectedTextIncludes?: string[]; - message: DiscordObservedMessage; -}) { - if (!params.message.text.trim()) { - throw new Error(`reply message ${params.message.messageId} was empty`); - } - for (const expected of params.expectedTextIncludes ?? []) { - if (!params.message.text.includes(expected)) { - throw new Error( - `reply message ${params.message.messageId} missing expected text: ${expected}`, - ); - } - } -} - async function assertDiscordApplicationCommandsRegistered(params: { applicationId: string; expectedCommandNames: string[]; diff --git a/extensions/qa-lab/src/live-transports/shared/live-scenario-reply.ts b/extensions/qa-lab/src/live-transports/shared/live-scenario-reply.ts new file mode 100644 index 000000000000..7847ae633873 --- /dev/null +++ b/extensions/qa-lab/src/live-transports/shared/live-scenario-reply.ts @@ -0,0 +1,21 @@ +type LiveScenarioReplyMessage = { + messageId: string | number; + text: string; + [key: string]: unknown; +}; + +export function assertLiveScenarioReply(params: { + expectedTextIncludes?: string[]; + message: LiveScenarioReplyMessage; +}) { + if (!params.message.text.trim()) { + throw new Error(`reply message ${params.message.messageId} was empty`); + } + for (const expected of params.expectedTextIncludes ?? []) { + if (!params.message.text.includes(expected)) { + throw new Error( + `reply message ${params.message.messageId} missing expected text: ${expected}`, + ); + } + } +} 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 e93ba4af5671..307c596550a2 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 @@ -39,6 +39,7 @@ import { redactQaLiveLaneIssues, } from "../shared/live-artifacts.js"; import { startQaLiveLaneGateway } from "../shared/live-gateway.runtime.js"; +import { assertLiveScenarioReply as assertTelegramScenarioReply } from "../shared/live-scenario-reply.js"; import type { LiveTransportCheckResult } from "../shared/live-transport-result.js"; import { normalizeLiveTransportRttOptions, @@ -1442,22 +1443,6 @@ function matchesTelegramScenarioReply(params: { ); } -function assertTelegramScenarioReply(params: { - expectedTextIncludes?: string[]; - message: TelegramObservedMessage; -}) { - if (!params.message.text.trim()) { - throw new Error(`reply message ${params.message.messageId} was empty`); - } - for (const expected of params.expectedTextIncludes ?? []) { - if (!params.message.text.includes(expected)) { - throw new Error( - `reply message ${params.message.messageId} missing expected text: ${expected}`, - ); - } - } -} - function assertTelegramCanaryPresenceReply(message: TelegramObservedMessage) { if (!message.senderIsBot) { throw new Error(`canary reply message ${message.messageId} was not sent by a bot`);