99 lines
2.9 KiB
TypeScript
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',
|
|
})
|
|
})
|
|
})
|