























@@ -1,8 +1,5 @@
11import { afterEach, describe, expect, it, vi } from "vitest";
2-import {
3-buildOpenAICodexImageGenerationProvider,
4-buildOpenAIImageGenerationProvider,
5-} from "./image-generation-provider.js";
2+import { buildOpenAIImageGenerationProvider } from "./image-generation-provider.js";
6374const {
85 resolveApiKeyForProviderMock,
@@ -11,7 +8,13 @@ const {
118 assertOkOrThrowHttpErrorMock,
129 resolveProviderHttpRequestConfigMock,
1310} = vi.hoisted(() => ({
14-resolveApiKeyForProviderMock: vi.fn(async () => ({ apiKey: "openai-key" })),
11+resolveApiKeyForProviderMock: vi.fn(
12+async (_params?: {
13+provider?: string;
14+}): Promise<{ apiKey?: string; source?: string; mode?: string }> => ({
15+apiKey: "openai-key",
16+}),
17+),
1518postJsonRequestMock: vi.fn(),
1619postMultipartRequestMock: vi.fn(),
1720assertOkOrThrowHttpErrorMock: vi.fn(async () => {}),
@@ -76,9 +79,19 @@ function mockCodexImageStream(params: { imageData?: string; revisedPrompt?: stri
7679}));
7780}
788182+function mockCodexAuthOnly() {
83+resolveApiKeyForProviderMock.mockImplementation(async (params?: { provider?: string }) => {
84+if (params?.provider === "openai-codex") {
85+return { apiKey: "codex-key", source: "profile:openai-codex:default", mode: "oauth" };
86+}
87+return {};
88+});
89+}
90+7991describe("openai image generation provider", () => {
8092afterEach(() => {
81-resolveApiKeyForProviderMock.mockClear();
93+resolveApiKeyForProviderMock.mockReset();
94+resolveApiKeyForProviderMock.mockResolvedValue({ apiKey: "openai-key" });
8295postJsonRequestMock.mockReset();
8396postMultipartRequestMock.mockReset();
8497assertOkOrThrowHttpErrorMock.mockClear();
@@ -281,13 +294,14 @@ describe("openai image generation provider", () => {
281294expect(result.images).toHaveLength(1);
282295});
283296284-it("registers Codex OAuth image generation through Responses streaming", async () => {
297+it("falls back to Codex OAuth image generation through Responses streaming", async () => {
298+mockCodexAuthOnly();
285299mockCodexImageStream({ imageData: "codex-image", revisedPrompt: "revised codex prompt" });
286300287-const provider = buildOpenAICodexImageGenerationProvider();
301+const provider = buildOpenAIImageGenerationProvider();
288302const authStore = { version: 1, profiles: {} };
289303const result = await provider.generateImage({
290-provider: "openai-codex",
304+provider: "openai",
291305model: "gpt-image-2",
292306prompt: "Draw a Codex lighthouse",
293307cfg: {},
@@ -296,6 +310,12 @@ describe("openai image generation provider", () => {
296310size: "1024x1536",
297311});
298312313+expect(resolveApiKeyForProviderMock).toHaveBeenCalledWith(
314+expect.objectContaining({
315+provider: "openai",
316+store: authStore,
317+}),
318+);
299319expect(resolveApiKeyForProviderMock).toHaveBeenCalledWith(
300320expect.objectContaining({
301321provider: "openai-codex",
@@ -306,7 +326,7 @@ describe("openai image generation provider", () => {
306326expect.objectContaining({
307327defaultBaseUrl: "https://chatgpt.com/backend-api/codex",
308328defaultHeaders: expect.objectContaining({
309-Authorization: "Bearer openai-key",
329+Authorization: "Bearer codex-key",
310330Accept: "text/event-stream",
311331}),
312332provider: "openai-codex",
@@ -353,11 +373,12 @@ describe("openai image generation provider", () => {
353373});
354374355375it("sends Codex reference images as Responses input images", async () => {
376+mockCodexAuthOnly();
356377mockCodexImageStream();
357378358-const provider = buildOpenAICodexImageGenerationProvider();
379+const provider = buildOpenAIImageGenerationProvider();
359380await provider.generateImage({
360-provider: "openai-codex",
381+provider: "openai",
361382model: "gpt-image-2",
362383prompt: "Use the reference image",
363384cfg: {},
@@ -384,11 +405,12 @@ describe("openai image generation provider", () => {
384405});
385406386407it("satisfies Codex count by issuing one Responses request per image", async () => {
408+mockCodexAuthOnly();
387409mockCodexImageStream({ imageData: "codex-image" });
388410389-const provider = buildOpenAICodexImageGenerationProvider();
411+const provider = buildOpenAIImageGenerationProvider();
390412const result = await provider.generateImage({
391-provider: "openai-codex",
413+provider: "openai",
392414model: "gpt-image-2",
393415prompt: "Draw two Codex icons",
394416cfg: {},
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。