fix(design): normalize video quote options
This commit is contained in:
@@ -592,6 +592,53 @@ describe('Works Square AI design adapter', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('normalizes the server video option shape so the duration picker stays available', async () => {
|
||||
const videoConversation = {
|
||||
...serverConversation,
|
||||
brief: { ...serverConversation.brief, medium: 'video' },
|
||||
messages: serverConversation.messages.map((message) => ({
|
||||
...message,
|
||||
generation_quote: {
|
||||
...message.generation_quote!,
|
||||
medium: 'video',
|
||||
generation_parameters: {
|
||||
...message.generation_quote!.generation_parameters,
|
||||
model: 'wan2.7-i2v-2026-04-25',
|
||||
resolution: '720P',
|
||||
aspect_ratio: '4:5',
|
||||
duration_seconds: 4,
|
||||
},
|
||||
generation_options: {
|
||||
models: [{ id: 'wan2.7-i2v-2026-04-25', label: '万相视频', enabled: true, multiplier: 1 }],
|
||||
resolutions: [{ value: '720P', label: '720P', enabled: true, multiplier: 1 }],
|
||||
durations: [
|
||||
{ seconds: 2, label: '2 秒', enabled: true, multiplier: 1 },
|
||||
{ seconds: 6, label: '6 秒', enabled: true, multiplier: 1 },
|
||||
],
|
||||
aspect_ratios: [{ value: '4:5', label: '4:5', default: true, enabled: true, multiplier: 1 }],
|
||||
},
|
||||
},
|
||||
})),
|
||||
};
|
||||
const fetchMock = vi.fn<typeof fetch>().mockResolvedValueOnce(jsonResponse(videoConversation));
|
||||
const adapter = new WorksSquareDesignWorkspace({
|
||||
apiBaseUrl: 'https://square.example',
|
||||
fetchImpl: fetchMock,
|
||||
});
|
||||
|
||||
const mapped = await adapter.getConversation('workspace-one', 'conversation-one');
|
||||
const quote = mapped.messages[0].generationQuote!;
|
||||
|
||||
expect(mapped.brief.medium).toBe('video');
|
||||
expect(quote.medium).toBe('video');
|
||||
expect(quote.generationOptions.models[0]).toMatchObject({
|
||||
value: 'wan2.7-i2v-2026-04-25',
|
||||
disabled: false,
|
||||
});
|
||||
expect(quote.generationOptions.durations.map((option) => option.value)).toEqual([2, 6]);
|
||||
expect(quote.generationOptions.durations.every((option) => !option.disabled)).toBe(true);
|
||||
});
|
||||
|
||||
it('uploads a local reference image as multipart data and maps the returned Asset', async () => {
|
||||
const fetchMock = vi.fn<typeof fetch>().mockResolvedValueOnce(jsonResponse({
|
||||
asset_id: 'asset-uploaded',
|
||||
|
||||
Reference in New Issue
Block a user