Files
waooplus/tests/unit/model-gateway/openai-compat-template-image-output-urls.test.ts

99 lines
2.9 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
const resolveConfigMock = vi.hoisted(() => vi.fn(async () => ({
providerId: 'openai-compatible:test-provider',
baseUrl: 'https://compat.example.com/v1',
apiKey: 'sk-test',
})))
vi.mock('@/lib/model-gateway/openai-compat/common', () => ({
resolveOpenAICompatClientConfig: resolveConfigMock,
}))
import { generateImageViaOpenAICompatTemplate } from '@/lib/model-gateway/openai-compat/template-image'
describe('openai-compat template image output urls', () => {
beforeEach(() => {
vi.clearAllMocks()
})
it('returns all image urls when outputUrlsPath contains multiple values', async () => {
globalThis.fetch = vi.fn(async () => new Response(JSON.stringify({
data: [
{ url: 'https://cdn.test/1.png' },
{ url: 'https://cdn.test/2.png' },
],
}), { status: 200 })) as unknown as typeof fetch
const result = await generateImageViaOpenAICompatTemplate({
userId: 'user-1',
providerId: 'openai-compatible:test-provider',
modelId: 'gpt-image-1',
modelKey: 'openai-compatible:test-provider::gpt-image-1',
prompt: 'draw a cat',
profile: 'openai-compatible',
template: {
version: 1,
mediaType: 'image',
mode: 'sync',
create: {
method: 'POST',
path: '/images/generations',
contentType: 'application/json',
bodyTemplate: {
model: '{{model}}',
prompt: '{{prompt}}',
},
},
response: {
outputUrlPath: '$.data[0].url',
outputUrlsPath: '$.data',
},
},
})
expect(result).toEqual({
success: true,
imageUrl: 'https://cdn.test/1.png',
imageUrls: ['https://cdn.test/1.png', 'https://cdn.test/2.png'],
})
})
it('keeps single-url output compatible when outputUrlsPath has only one image', async () => {
globalThis.fetch = vi.fn(async () => new Response(JSON.stringify({
data: [{ url: 'https://cdn.test/only.png' }],
}), { status: 200 })) as unknown as typeof fetch
const result = await generateImageViaOpenAICompatTemplate({
userId: 'user-1',
providerId: 'openai-compatible:test-provider',
modelId: 'gpt-image-1',
modelKey: 'openai-compatible:test-provider::gpt-image-1',
prompt: 'draw a cat',
profile: 'openai-compatible',
template: {
version: 1,
mediaType: 'image',
mode: 'sync',
create: {
method: 'POST',
path: '/images/generations',
contentType: 'application/json',
bodyTemplate: {
model: '{{model}}',
prompt: '{{prompt}}',
},
},
response: {
outputUrlsPath: '$.data',
},
},
})
expect(result).toEqual({
success: true,
imageUrl: 'https://cdn.test/only.png',
})
})
})