






















@@ -20,6 +20,32 @@ import * as providerAuthRuntime from "openclaw/plugin-sdk/provider-auth-runtime"
2020import { expectExplicitMusicGenerationCapabilities } from "openclaw/plugin-sdk/provider-test-contracts";
2121import { buildGoogleMusicGenerationProvider } from "./music-generation-provider.js";
222223+type GoogleGenAIConfig = {
24+apiKey?: string;
25+httpOptions?: {
26+baseUrl?: string;
27+};
28+};
29+30+type GenerateContentRequest = {
31+model?: string;
32+config?: unknown;
33+};
34+35+function lastGoogleGenAIConfig(): GoogleGenAIConfig {
36+const calls = createGoogleGenAIMock.mock.calls as unknown[][];
37+const config = calls.at(-1)?.[0];
38+expect(config).toBeDefined();
39+return config as GoogleGenAIConfig;
40+}
41+42+function firstGenerateContentRequest(): GenerateContentRequest {
43+const calls = generateContentMock.mock.calls as unknown[][];
44+const request = calls[0]?.[0];
45+expect(request).toBeDefined();
46+return request as GenerateContentRequest;
47+}
48+2349describe("google music generation provider", () => {
2450afterEach(() => {
2551vi.restoreAllMocks();
@@ -69,22 +95,15 @@ describe("google music generation provider", () => {
6995instrumental: true,
7096});
719772-expect(generateContentMock).toHaveBeenCalledWith(
73-expect.objectContaining({
74-model: "lyria-3-clip-preview",
75-config: {
76-responseModalities: ["AUDIO", "TEXT"],
77-},
78-}),
79-);
98+const generateRequest = firstGenerateContentRequest();
99+expect(generateRequest.model).toBe("lyria-3-clip-preview");
100+expect(generateRequest.config).toEqual({
101+responseModalities: ["AUDIO", "TEXT"],
102+});
80103expect(result.tracks).toHaveLength(1);
81104expect(result.tracks[0]?.mimeType).toBe("audio/mpeg");
82105expect(result.lyrics).toEqual(["wake the city up"]);
83-expect(createGoogleGenAIMock).toHaveBeenCalledWith(
84-expect.objectContaining({
85-apiKey: "google-key",
86-}),
87-);
106+expect(lastGoogleGenAIConfig().apiKey).toBe("google-key");
88107});
8910890109it("strips /v1beta suffix from configured baseUrl before passing to GoogleGenAI SDK", async () => {
@@ -125,12 +144,8 @@ describe("google music generation provider", () => {
125144instrumental: true,
126145});
127146128-expect(createGoogleGenAIMock).toHaveBeenCalledWith(
129-expect.objectContaining({
130-httpOptions: expect.objectContaining({
131-baseUrl: "https://generativelanguage.googleapis.com",
132-}),
133-}),
147+expect(lastGoogleGenAIConfig().httpOptions?.baseUrl).toBe(
148+"https://generativelanguage.googleapis.com",
134149);
135150});
136151@@ -165,12 +180,8 @@ describe("google music generation provider", () => {
165180instrumental: true,
166181});
167182168-expect(createGoogleGenAIMock).toHaveBeenCalledWith(
169-expect.objectContaining({
170-httpOptions: expect.objectContaining({
171-baseUrl: "https://proxy.example.com/v1beta/route",
172-}),
173-}),
183+expect(lastGoogleGenAIConfig().httpOptions?.baseUrl).toBe(
184+"https://proxy.example.com/v1beta/route",
174185);
175186});
176187@@ -207,12 +218,8 @@ describe("google music generation provider", () => {
207218instrumental: true,
208219});
209220210-expect(createGoogleGenAIMock).toHaveBeenCalledWith(
211-expect.objectContaining({
212-httpOptions: expect.objectContaining({
213-baseUrl: "https://generativelanguage.googleapis.com",
214-}),
215-}),
221+expect(lastGoogleGenAIConfig().httpOptions?.baseUrl).toBe(
222+"https://generativelanguage.googleapis.com",
216223);
217224});
218225@@ -243,13 +250,7 @@ describe("google music generation provider", () => {
243250instrumental: true,
244251});
245252246-expect(createGoogleGenAIMock).toHaveBeenCalledWith(
247-expect.objectContaining({
248-httpOptions: expect.not.objectContaining({
249-baseUrl: expect.anything(),
250-}),
251-}),
252-);
253+expect(lastGoogleGenAIConfig().httpOptions?.baseUrl).toBeUndefined();
253254});
254255255256it("rejects unsupported wav output on clip model", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。