67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
normalizeVideoGenerationSelections,
|
|
resolveEffectiveVideoCapabilityDefinitions,
|
|
resolveEffectiveVideoCapabilityFields,
|
|
} from '@/lib/model-capabilities/video-effective'
|
|
import type { VideoPricingTier } from '@/lib/model-pricing/video-tier'
|
|
|
|
const GOOGLE_VEO_TIERS: VideoPricingTier[] = [
|
|
{ when: { resolution: '720p', duration: 4 } },
|
|
{ when: { resolution: '720p', duration: 6 } },
|
|
{ when: { resolution: '720p', duration: 8 } },
|
|
{ when: { resolution: '1080p', duration: 8 } },
|
|
{ when: { resolution: '4k', duration: 8 } },
|
|
]
|
|
|
|
describe('model-capabilities/video-effective', () => {
|
|
it('derives capability definitions from pricing tiers', () => {
|
|
const definitions = resolveEffectiveVideoCapabilityDefinitions({
|
|
pricingTiers: GOOGLE_VEO_TIERS,
|
|
})
|
|
const byField = new Map(definitions.map((item) => [item.field, item.options]))
|
|
|
|
expect(byField.get('resolution')).toEqual(['720p', '1080p', '4k'])
|
|
expect(byField.get('duration')).toEqual([4, 6, 8])
|
|
})
|
|
|
|
it('keeps pinned field and adjusts the linked field to nearest supported combo', () => {
|
|
const definitions = resolveEffectiveVideoCapabilityDefinitions({
|
|
pricingTiers: GOOGLE_VEO_TIERS,
|
|
})
|
|
|
|
const normalized = normalizeVideoGenerationSelections({
|
|
definitions,
|
|
pricingTiers: GOOGLE_VEO_TIERS,
|
|
selection: {
|
|
resolution: '1080p',
|
|
duration: 4,
|
|
},
|
|
pinnedFields: ['resolution'],
|
|
})
|
|
|
|
expect(normalized).toEqual({
|
|
resolution: '1080p',
|
|
duration: 8,
|
|
})
|
|
})
|
|
|
|
it('filters dependent options by current selection', () => {
|
|
const definitions = resolveEffectiveVideoCapabilityDefinitions({
|
|
pricingTiers: GOOGLE_VEO_TIERS,
|
|
})
|
|
const fields = resolveEffectiveVideoCapabilityFields({
|
|
definitions,
|
|
pricingTiers: GOOGLE_VEO_TIERS,
|
|
selection: {
|
|
resolution: '1080p',
|
|
},
|
|
})
|
|
const durationField = fields.find((field) => field.field === 'duration')
|
|
|
|
expect(durationField?.options).toEqual([8])
|
|
expect(durationField?.value).toBe(8)
|
|
})
|
|
})
|
|
|