diff --git a/extensions/google/speech-provider.test.ts b/extensions/google/speech-provider.test.ts index 7a4fc914cd7..8f40f4a3d7f 100644 --- a/extensions/google/speech-provider.test.ts +++ b/extensions/google/speech-provider.test.ts @@ -66,6 +66,25 @@ function expectRecordFields(value: unknown, expected: Record) { return actual; } +function requireFirstMockArg(mock: ReturnType, label: string): unknown { + const [call] = mock.mock.calls; + if (!call) { + throw new Error(`Expected ${label}`); + } + return call[0]; +} + +function requireFirstRecordArg( + mock: ReturnType, + label: string, +): Record { + const value = requireFirstMockArg(mock, label); + if (!value || typeof value !== "object" || Array.isArray(value)) { + throw new Error(`Expected ${label}`); + } + return value as Record; +} + describe("Google speech provider", () => { afterEach(() => { vi.unstubAllGlobals(); @@ -94,7 +113,7 @@ describe("Google speech provider", () => { timeoutMs: 12_345, }); - const request = expectRecordFields(requestMock.mock.calls[0]?.[0], { + const request = expectRecordFields(requireFirstRecordArg(requestMock, "Google TTS request"), { url: "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-tts-preview:generateContent", body: { contents: [ @@ -150,11 +169,14 @@ describe("Google speech provider", () => { fileExtension: ".opus", voiceCompatible: true, }); - const transcodeArg = expectRecordFields(transcodeAudioBufferToOpusMock.mock.calls[0]?.[0], { - inputExtension: "wav", - tempPrefix: "tts-google-", - timeoutMs: 12_000, - }); + const transcodeArg = expectRecordFields( + requireFirstRecordArg(transcodeAudioBufferToOpusMock, "Google TTS transcode request"), + { + inputExtension: "wav", + tempPrefix: "tts-google-", + timeoutMs: 12_000, + }, + ); expect(Buffer.isBuffer(transcodeArg.audioBuffer)).toBe(true); const audioBuffer = transcodeArg.audioBuffer as Buffer; expect(audioBuffer.subarray(0, 4).toString("ascii")).toBe("RIFF"); @@ -362,10 +384,9 @@ describe("Google speech provider", () => { timeoutMs: 10_000, }); - expectRecordFields(requestMock.mock.calls[0]?.[0], { + const request = expectRecordFields(requireFirstRecordArg(requestMock, "Google TTS request"), { url: "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-tts-preview:generateContent", - }); - const request = requestMock.mock.calls[0]?.[0] as { headers?: HeadersInit }; + }) as { headers?: HeadersInit }; expect(new Headers(request.headers).get("x-goog-api-key")).toBe("env-google-key"); }); @@ -394,7 +415,9 @@ describe("Google speech provider", () => { timeoutMs: 10_000, }); - const request = requestMock.mock.calls[0]?.[0] as { headers?: HeadersInit }; + const request = requireFirstRecordArg(requestMock, "Google TTS request") as { + headers?: HeadersInit; + }; expect(new Headers(request.headers).get("x-goog-api-key")).toBe("model-provider-google-key"); }); @@ -422,9 +445,12 @@ describe("Google speech provider", () => { timeoutMs: 5_000, }); - const request = expectRecordFields(postJsonRequestMock.mock.calls[0]?.[0], { - url: "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-pro-tts:generateContent", - }); + const request = expectRecordFields( + requireFirstRecordArg(postJsonRequestMock, "Google telephony TTS request"), + { + url: "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-pro-tts:generateContent", + }, + ); const body = request.body as { contents?: unknown; generationConfig?: { speechConfig?: unknown }; @@ -465,7 +491,7 @@ describe("Google speech provider", () => { timeoutMs: 10_000, }); - const request = requestMock.mock.calls[0]?.[0] as { + const request = requireFirstRecordArg(requestMock, "Google TTS request") as { body?: { contents?: Array<{ parts?: Array<{ text?: string }> }> }; }; expect(request.body?.contents?.[0]?.parts?.[0]?.text).toBe( @@ -615,7 +641,7 @@ describe("Google speech provider", () => { }); const requestConfig = expectRecordFields( - resolveProviderHttpRequestConfigMock.mock.calls[0]?.[0], + requireFirstRecordArg(resolveProviderHttpRequestConfigMock, "Google TTS HTTP config request"), { allowPrivateNetwork: true, }, @@ -645,7 +671,7 @@ describe("Google speech provider", () => { }); const requestConfig = expectRecordFields( - resolveProviderHttpRequestConfigMock.mock.calls[0]?.[0], + requireFirstRecordArg(resolveProviderHttpRequestConfigMock, "Google TTS HTTP config request"), { allowPrivateNetwork: true, },