@@ -67,6 +67,81 @@ describe("OpenAI image-generation provider", () => {
6767 } ) ;
6868 } ) ;
6969
70+ it ( "maps supported aspect ratios onto OpenAI size presets" , async ( ) => {
71+ vi . spyOn ( modelAuth , "resolveApiKeyForProvider" ) . mockResolvedValue ( {
72+ apiKey : "sk-test" ,
73+ source : "env" ,
74+ mode : "api-key" ,
75+ } ) ;
76+ const fetchMock = vi . fn ( ) . mockResolvedValue ( {
77+ ok : true ,
78+ json : async ( ) => ( {
79+ data : [ { b64_json : Buffer . from ( "png-data" ) . toString ( "base64" ) } ] ,
80+ } ) ,
81+ } ) ;
82+ vi . stubGlobal ( "fetch" , fetchMock ) ;
83+
84+ const provider = buildOpenAIImageGenerationProvider ( ) ;
85+ await provider . generateImage ( {
86+ provider : "openai" ,
87+ model : "gpt-image-1.5" ,
88+ prompt : "draw a portrait" ,
89+ aspectRatio : "9:16" ,
90+ cfg : { } ,
91+ authStore : { version : 1 , profiles : { } } ,
92+ } ) ;
93+
94+ expect ( fetchMock ) . toHaveBeenCalledWith (
95+ "https://api.openai.com/v1/images/generations" ,
96+ expect . objectContaining ( {
97+ body : JSON . stringify ( {
98+ model : "gpt-image-1.5" ,
99+ prompt : "draw a portrait" ,
100+ n : 1 ,
101+ size : "1024x1536" ,
102+ } ) ,
103+ } ) ,
104+ ) ;
105+ } ) ;
106+
107+ it ( "prefers an explicit size over aspect ratio mapping" , async ( ) => {
108+ vi . spyOn ( modelAuth , "resolveApiKeyForProvider" ) . mockResolvedValue ( {
109+ apiKey : "sk-test" ,
110+ source : "env" ,
111+ mode : "api-key" ,
112+ } ) ;
113+ const fetchMock = vi . fn ( ) . mockResolvedValue ( {
114+ ok : true ,
115+ json : async ( ) => ( {
116+ data : [ { b64_json : Buffer . from ( "png-data" ) . toString ( "base64" ) } ] ,
117+ } ) ,
118+ } ) ;
119+ vi . stubGlobal ( "fetch" , fetchMock ) ;
120+
121+ const provider = buildOpenAIImageGenerationProvider ( ) ;
122+ await provider . generateImage ( {
123+ provider : "openai" ,
124+ model : "gpt-image-1.5" ,
125+ prompt : "draw a landscape" ,
126+ size : "1024x1024" ,
127+ aspectRatio : "16:9" ,
128+ cfg : { } ,
129+ authStore : { version : 1 , profiles : { } } ,
130+ } ) ;
131+
132+ expect ( fetchMock ) . toHaveBeenCalledWith (
133+ "https://api.openai.com/v1/images/generations" ,
134+ expect . objectContaining ( {
135+ body : JSON . stringify ( {
136+ model : "gpt-image-1.5" ,
137+ prompt : "draw a landscape" ,
138+ n : 1 ,
139+ size : "1024x1024" ,
140+ } ) ,
141+ } ) ,
142+ ) ;
143+ } ) ;
144+
70145 it ( "rejects reference-image edits for now" , async ( ) => {
71146 const provider = buildOpenAIImageGenerationProvider ( ) ;
72147
0 commit comments