| import { describe, expect, it } from 'vitest' |
| import { |
| normalizeGenerationListResponse, |
| normalizeModelFamiliesResponse |
| } from '../sora' |
|
|
| describe('sora api normalizers', () => { |
| it('normalizes generation list from data shape', () => { |
| const result = normalizeGenerationListResponse({ |
| data: [{ id: 1, status: 'pending' }], |
| total: 9, |
| page: 2 |
| }) |
|
|
| expect(result.data).toHaveLength(1) |
| expect(result.total).toBe(9) |
| expect(result.page).toBe(2) |
| }) |
|
|
| it('normalizes generation list from items shape', () => { |
| const result = normalizeGenerationListResponse({ |
| items: [{ id: 1, status: 'completed' }], |
| total: 1 |
| }) |
|
|
| expect(result.data).toHaveLength(1) |
| expect(result.total).toBe(1) |
| expect(result.page).toBe(1) |
| }) |
|
|
| it('falls back to empty generation list on invalid payload', () => { |
| const result = normalizeGenerationListResponse(null) |
| expect(result).toEqual({ data: [], total: 0, page: 1 }) |
| }) |
|
|
| it('normalizes family model payload', () => { |
| const result = normalizeModelFamiliesResponse({ |
| data: [ |
| { |
| id: 'sora2', |
| name: 'Sora 2', |
| type: 'video', |
| orientations: ['landscape', 'portrait'], |
| durations: [10, 15] |
| } |
| ] |
| }) |
|
|
| expect(result).toHaveLength(1) |
| expect(result[0].id).toBe('sora2') |
| expect(result[0].orientations).toEqual(['landscape', 'portrait']) |
| expect(result[0].durations).toEqual([10, 15]) |
| }) |
|
|
| it('normalizes legacy flat model list into families', () => { |
| const result = normalizeModelFamiliesResponse({ |
| items: [ |
| { id: 'sora2-landscape-10s', type: 'video' }, |
| { id: 'sora2-portrait-15s', type: 'video' }, |
| { id: 'gpt-image-square', type: 'image' } |
| ] |
| }) |
|
|
| const sora2 = result.find((m) => m.id === 'sora2') |
| expect(sora2).toBeTruthy() |
| expect(sora2?.orientations).toEqual(['landscape', 'portrait']) |
| expect(sora2?.durations).toEqual([10, 15]) |
|
|
| const image = result.find((m) => m.id === 'gpt-image') |
| expect(image).toBeTruthy() |
| expect(image?.type).toBe('image') |
| expect(image?.orientations).toEqual(['square']) |
| }) |
|
|
| it('falls back to empty families on invalid payload', () => { |
| expect(normalizeModelFamiliesResponse(undefined)).toEqual([]) |
| expect(normalizeModelFamiliesResponse({})).toEqual([]) |
| }) |
| }) |
|
|
|
|