




















@@ -1,7 +1,20 @@
11import { beforeEach, describe, expect, it, vi } from "vitest";
22import type { OpenClawConfig } from "../../../config/config.js";
3+import type { CodexRuntimePluginInstallResult } from "../../codex-runtime-plugin-install.js";
34import { applyNonInteractivePluginProviderChoice } from "./auth-choice.plugin-providers.js";
456+const ensureCodexRuntimePluginForModelSelection = vi.hoisted(() =>
7+vi.fn(
8+async ({ cfg }: { cfg: OpenClawConfig }): Promise<CodexRuntimePluginInstallResult> => ({
9+ cfg,
10+required: false,
11+installed: false,
12+}),
13+),
14+);
15+vi.mock("../../codex-runtime-plugin-install.js", () => ({
16+ ensureCodexRuntimePluginForModelSelection,
17+}));
518const resolvePreferredProviderForAuthChoice = vi.hoisted(() => vi.fn(async () => undefined));
619vi.mock("../../../plugins/provider-auth-choice-preference.js", () => ({
720 resolvePreferredProviderForAuthChoice,
@@ -29,6 +42,11 @@ beforeEach(() => {
2942resolveOwningPluginIdsForProvider.mockReturnValue(undefined as never);
3043resolveProviderPluginChoice.mockReturnValue(undefined);
3144resolvePluginProviders.mockReturnValue([] as never);
45+ensureCodexRuntimePluginForModelSelection.mockImplementation(async ({ cfg }) => ({
46+ cfg,
47+required: false,
48+installed: false,
49+}));
3250});
33513452function createRuntime() {
@@ -208,4 +226,48 @@ describe("applyNonInteractivePluginProviderChoice", () => {
208226}),
209227);
210228});
229+230+it("ensures Codex after a non-interactive OpenAI provider choice sets the default model", async () => {
231+const runtime = createRuntime();
232+const selectedConfig = {
233+agents: { defaults: { model: { primary: "openai/gpt-5.5" } } },
234+} as OpenClawConfig;
235+const installedConfig = {
236+ ...selectedConfig,
237+plugins: { entries: { codex: { enabled: true } } },
238+} as OpenClawConfig;
239+const runNonInteractive = vi.fn(async () => selectedConfig);
240+ensureCodexRuntimePluginForModelSelection.mockResolvedValue({
241+cfg: installedConfig,
242+required: true,
243+installed: true,
244+status: "installed",
245+});
246+resolvePluginProviders.mockReturnValue([{ id: "openai", pluginId: "openai" }] as never);
247+resolveProviderPluginChoice.mockReturnValue({
248+provider: { id: "openai", pluginId: "openai", label: "OpenAI" },
249+method: { runNonInteractive },
250+});
251+252+const result = await applyNonInteractivePluginProviderChoice({
253+nextConfig: { agents: { defaults: {} } } as OpenClawConfig,
254+authChoice: "openai-api-key",
255+opts: {} as never,
256+runtime: runtime as never,
257+baseConfig: { agents: { defaults: {} } } as OpenClawConfig,
258+resolveApiKey: vi.fn(),
259+toApiKeyCredential: vi.fn(),
260+});
261+262+expect(runNonInteractive).toHaveBeenCalledOnce();
263+expect(ensureCodexRuntimePluginForModelSelection).toHaveBeenCalledWith(
264+expect.objectContaining({
265+cfg: selectedConfig,
266+model: "openai/gpt-5.5",
267+ runtime,
268+workspaceDir: expect.any(String),
269+}),
270+);
271+expect(result).toBe(installedConfig);
272+});
211273});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。