fix(design): normalize video quote options

This commit is contained in:
2026-08-18 13:06:01 +08:00
parent 11b19832a3
commit eb2a6e8c97
3 changed files with 129 additions and 8 deletions

View File

@@ -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',