48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|||
|
|
|
||
|
|
import {
|
||
|
|
createVideoModelPricesForm,
|
||
|
|
serializeVideoModelPrices,
|
||
|
|
videoModelPriceFamilyRows
|
||
|
|
} from '../groupsVideoModelPricing'
|
||
|
|
|
||
|
|
describe('Grok video model pricing form', () => {
|
||
|
|
it('provides editable rows for both canonical Grok video families', () => {
|
||
|
|
const form = createVideoModelPricesForm()
|
||
|
|
|
||
|
|
expect(videoModelPriceFamilyRows(form).map(({ key }) => key)).toEqual([
|
||
|
|
'grok-imagine-video',
|
||
|
|
'grok-imagine-video-1.5'
|
||
|
|
])
|
||
|
|
expect(form['grok-imagine-video']['480p']).toBeNull()
|
||
|
|
expect(form['grok-imagine-video-1.5']['1080p']).toBeNull()
|
||
|
|
})
|
||
|
|
|
||
|
|
it('serializes only finite non-negative prices and preserves future families', () => {
|
||
|
|
const form = createVideoModelPricesForm({
|
||
|
|
'grok-imagine-video-2': { '1080p': 0.4 }
|
||
|
|
})
|
||
|
|
form['grok-imagine-video']['480p'] = 0.05
|
||
|
|
form['grok-imagine-video']['720p'] = ''
|
||
|
|
form['grok-imagine-video-1.5']['1080p'] = -1
|
||
|
|
|
||
|
|
expect(serializeVideoModelPrices(form)).toEqual({
|
||
|
|
'grok-imagine-video': { '480p': 0.05 },
|
||
|
|
'grok-imagine-video-2': { '1080p': 0.4 }
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
it('round-trips unknown model families so editing does not discard them', () => {
|
||
|
|
const form = createVideoModelPricesForm({
|
||
|
|
'grok-imagine-video-2': { '480p': 0.2 }
|
||
|
|
})
|
||
|
|
|
||
|
|
expect(videoModelPriceFamilyRows(form).map(({ key }) => key)).toContain(
|
||
|
|
'grok-imagine-video-2'
|
||
|
|
)
|
||
|
|
expect(serializeVideoModelPrices(form)).toMatchObject({
|
||
|
|
'grok-imagine-video-2': { '480p': 0.2 }
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|