test: guard google speech mock calls

This commit is contained in:
Peter Steinberger
2026-05-12 00:06:11 +01:00
parent cdef959514
commit fcd0e9d5ad

View File

@@ -66,6 +66,25 @@ function expectRecordFields(value: unknown, expected: Record<string, unknown>) {
return actual;
}
function requireFirstMockArg(mock: ReturnType<typeof vi.fn>, label: string): unknown {
const [call] = mock.mock.calls;
if (!call) {
throw new Error(`Expected ${label}`);
}
return call[0];
}
function requireFirstRecordArg(
mock: ReturnType<typeof vi.fn>,
label: string,
): Record<string, unknown> {
const value = requireFirstMockArg(mock, label);
if (!value || typeof value !== "object" || Array.isArray(value)) {
throw new Error(`Expected ${label}`);
}
return value as Record<string, unknown>;
}
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,
},