






























@@ -0,0 +1,196 @@
1+import { capturePluginRegistration } from "openclaw/plugin-sdk/plugin-test-runtime";
2+import { describe, expect, it, vi } from "vitest";
3+import {
4+PIXVERSE_BASE_URL_BY_REGION,
5+PIXVERSE_DEFAULT_VIDEO_MODEL_REF,
6+PIXVERSE_PROVIDER_ID,
7+} from "./constants.js";
8+import plugin from "./index.js";
9+import { applyPixVerseConfig, applyPixVerseProviderConfig } from "./onboard.js";
10+11+function registerPixVerseProvider() {
12+const captured = capturePluginRegistration(plugin);
13+expect(captured.videoGenerationProviders.map((provider) => provider.id)).toEqual([
14+PIXVERSE_PROVIDER_ID,
15+]);
16+const provider = captured.providers[0];
17+if (!provider) {
18+throw new Error("expected PixVerse setup provider");
19+}
20+expect(provider.id).toBe(PIXVERSE_PROVIDER_ID);
21+return provider;
22+}
23+24+function createRuntimeContext(region: "international" | "cn") {
25+const select = vi.fn(async (params: { message: string }) => {
26+expect(params.message).toBe("Select PixVerse API region");
27+return region;
28+});
29+const ctx = {
30+config: {
31+models: {
32+providers: {
33+pixverse: {
34+baseUrl: "https://proxy.example/openapi/v2",
35+models: [],
36+params: { quality: "720p" },
37+},
38+},
39+},
40+},
41+env: {},
42+prompter: {
43+intro: vi.fn(),
44+outro: vi.fn(),
45+note: vi.fn(),
46+ select,
47+multiselect: vi.fn(),
48+text: vi.fn(async () => "pixverse-test-key"),
49+confirm: vi.fn(),
50+progress: vi.fn(() => ({
51+update: vi.fn(),
52+stop: vi.fn(),
53+})),
54+},
55+runtime: {
56+error: vi.fn(),
57+exit: vi.fn(),
58+log: vi.fn(),
59+},
60+secretInputMode: "plaintext",
61+isRemote: false,
62+openUrl: vi.fn(),
63+oauth: {
64+createVpsAwareHandlers: vi.fn(),
65+},
66+} as never;
67+return { ctx, select };
68+}
69+70+describe("pixverse plugin", () => {
71+it("registers provider auth for the setup wizard", () => {
72+const provider = registerPixVerseProvider();
73+const auth = provider?.auth?.[0];
74+75+expect(provider).toMatchObject({
76+id: PIXVERSE_PROVIDER_ID,
77+label: "PixVerse",
78+docsPath: "/providers/pixverse",
79+envVars: ["PIXVERSE_API_KEY"],
80+});
81+expect(auth).toMatchObject({
82+id: "api-key",
83+label: "PixVerse API key",
84+kind: "api_key",
85+wizard: {
86+choiceId: "pixverse-api-key",
87+choiceLabel: "PixVerse API key",
88+choiceHint: "Prompts for International or CN endpoint",
89+groupId: "pixverse",
90+groupLabel: "PixVerse",
91+groupHint: "Video generation",
92+onboardingScopes: ["image-generation"],
93+},
94+});
95+});
96+97+it("prompts for the PixVerse region and writes provider config", async () => {
98+const provider = registerPixVerseProvider();
99+const auth = provider?.auth?.[0];
100+if (!auth) {
101+throw new Error("expected PixVerse auth method");
102+}
103+104+const { ctx, select } = createRuntimeContext("cn");
105+const result = await auth.run(ctx);
106+const regionSelect = select.mock.calls[0]?.[0];
107+108+expect(regionSelect).toEqual({
109+message: "Select PixVerse API region",
110+initialValue: "international",
111+options: [
112+{
113+value: "international",
114+label: "International",
115+hint: PIXVERSE_BASE_URL_BY_REGION.international,
116+},
117+{
118+value: "cn",
119+label: "CN",
120+hint: PIXVERSE_BASE_URL_BY_REGION.cn,
121+},
122+],
123+});
124+expect(result.profiles).toEqual([
125+{
126+profileId: "pixverse:default",
127+credential: {
128+type: "api_key",
129+provider: PIXVERSE_PROVIDER_ID,
130+key: "pixverse-test-key",
131+},
132+},
133+]);
134+expect(result.configPatch?.models?.providers?.pixverse).toEqual({
135+baseUrl: PIXVERSE_BASE_URL_BY_REGION.cn,
136+models: [],
137+params: { quality: "720p" },
138+region: "cn",
139+});
140+expect(result.defaultModel).toBeUndefined();
141+expect(result.configPatch?.agents?.defaults?.videoGenerationModel).toEqual({
142+primary: PIXVERSE_DEFAULT_VIDEO_MODEL_REF,
143+});
144+expect(result.notes).toEqual([`PixVerse endpoint: CN (${PIXVERSE_BASE_URL_BY_REGION.cn})`]);
145+});
146+147+it("only resets custom baseUrl when a region is explicitly selected", () => {
148+const config = {
149+models: {
150+providers: {
151+pixverse: {
152+baseUrl: "https://proxy.example/openapi/v2",
153+models: [],
154+params: { quality: "720p" },
155+},
156+},
157+},
158+};
159+160+expect(
161+applyPixVerseProviderConfig(config, "international").models?.providers?.pixverse,
162+).toEqual({
163+baseUrl: "https://proxy.example/openapi/v2",
164+models: [],
165+params: { quality: "720p" },
166+region: "international",
167+});
168+expect(
169+applyPixVerseProviderConfig(config, "cn", { resetBaseUrl: true }).models?.providers?.pixverse,
170+).toEqual({
171+baseUrl: PIXVERSE_BASE_URL_BY_REGION.cn,
172+models: [],
173+params: { quality: "720p" },
174+region: "cn",
175+});
176+});
177+178+it("preserves an existing video generation default", () => {
179+const result = applyPixVerseConfig(
180+{
181+agents: {
182+defaults: {
183+videoGenerationModel: {
184+primary: "openai/sora-2",
185+},
186+},
187+},
188+},
189+"international",
190+);
191+192+expect(result.agents?.defaults?.videoGenerationModel).toEqual({
193+primary: "openai/sora-2",
194+});
195+});
196+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。