From 657a668d94f33707bd5c0499cefda2ae266f6a28 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 31 May 2026 13:59:40 +0100 Subject: [PATCH] test(voice-call): drive Twilio stream failure timers --- .../voice-call/src/providers/twilio.test.ts | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/extensions/voice-call/src/providers/twilio.test.ts b/extensions/voice-call/src/providers/twilio.test.ts index bcd83f576f0..5ff42f51aed 100644 --- a/extensions/voice-call/src/providers/twilio.test.ts +++ b/extensions/voice-call/src/providers/twilio.test.ts @@ -554,37 +554,43 @@ describe("TwilioProvider", () => { }); it("fails stream playback when all audio sends and completion mark are dropped", async () => { - const provider = createProvider(); - provider.registerCallStream("CA-dropped", "MZ-dropped"); + vi.useFakeTimers(); + try { + const provider = createProvider(); + provider.registerCallStream("CA-dropped", "MZ-dropped"); - const sendAudio = vi.fn(() => ({ sent: false })); - const sendMark = vi.fn(() => ({ sent: false })); - const mediaStreamHandler = { - queueTts: async ( - _streamSid: string, - playFn: (signal: AbortSignal) => Promise, - ): Promise => { - await playFn(new AbortController().signal); - }, - sendAudio, - sendMark, - }; + const sendAudio = vi.fn(() => ({ sent: false })); + const sendMark = vi.fn(() => ({ sent: false })); + const mediaStreamHandler = { + queueTts: async ( + _streamSid: string, + playFn: (signal: AbortSignal) => Promise, + ): Promise => { + await playFn(new AbortController().signal); + }, + sendAudio, + sendMark, + }; - provider.setMediaStreamHandler(mediaStreamHandler as never); - provider.setTTSProvider({ - synthesisTimeoutMs: 5000, - synthesizeForTelephony: async () => Buffer.alloc(320), - }); + provider.setMediaStreamHandler(mediaStreamHandler as never); + provider.setTTSProvider({ + synthesisTimeoutMs: 5000, + synthesizeForTelephony: async () => Buffer.alloc(320), + }); - await expect( - provider.playTts({ + const playback = provider.playTts({ callId: "call-dropped", providerCallId: "CA-dropped", text: "Dropped audio", - }), - ).rejects.toThrow("Telephony stream playback failed"); - expect(sendAudio).toHaveBeenCalled(); - expect(sendMark).toHaveBeenCalledTimes(1); + }); + const playExpectation = expect(playback).rejects.toThrow("Telephony stream playback failed"); + await vi.advanceTimersByTimeAsync(100); + await playExpectation; + expect(sendAudio).toHaveBeenCalled(); + expect(sendMark).toHaveBeenCalledTimes(1); + } finally { + vi.useRealTimers(); + } }); it("fails stream playback when telephony synthesis returns empty audio", async () => {