feat: add asset library download button, fix env ports, update README, optimize semantics, support multi-image reading, and allow voiceover analysis for silent segments
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
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',
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user