Files
waooplus/tests/unit/novel-promotion/video-model-options.test.ts
2026-03-08 17:10:06 +08:00

68 lines
1.9 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
filterNormalVideoModelOptions,
isFirstLastFrameOnlyModel,
supportsFirstLastFrame,
} from '@/lib/model-capabilities/video-model-options'
import type { VideoModelOption } from '@/lib/novel-promotion/stages/video-stage-runtime/types'
describe('video model options partition', () => {
const models: VideoModelOption[] = [
{
value: 'p::normal',
label: 'normal',
capabilities: {
video: {
generationModeOptions: ['normal'],
firstlastframe: false,
},
},
},
{
value: 'p::firstlast-only',
label: 'firstlast-only',
capabilities: {
video: {
generationModeOptions: ['firstlastframe'],
firstlastframe: true,
},
},
},
{
value: 'p::both',
label: 'both',
capabilities: {
video: {
generationModeOptions: ['normal', 'firstlastframe'],
firstlastframe: true,
},
},
},
{
value: 'p::custom-no-capability',
label: 'custom-no-capability',
},
]
it('detects firstlastframe support and firstlastframe-only capability', () => {
expect(supportsFirstLastFrame(models[0])).toBe(false)
expect(supportsFirstLastFrame(models[1])).toBe(true)
expect(supportsFirstLastFrame(models[2])).toBe(true)
expect(supportsFirstLastFrame(models[3])).toBe(false)
expect(isFirstLastFrameOnlyModel(models[0])).toBe(false)
expect(isFirstLastFrameOnlyModel(models[1])).toBe(true)
expect(isFirstLastFrameOnlyModel(models[2])).toBe(false)
expect(isFirstLastFrameOnlyModel(models[3])).toBe(false)
})
it('filters out firstlastframe-only models from normal video model list', () => {
const normalModels = filterNormalVideoModelOptions(models)
expect(normalModels.map((item) => item.value)).toEqual([
'p::normal',
'p::both',
'p::custom-no-capability',
])
})
})