Files
LTX-DeskWEB/frontend/lib/genspace-multi-keyframe.test.ts
T

191 lines
5.6 KiB
TypeScript

import assert from 'node:assert/strict'
import { describe, it } from 'node:test'
import {
autoDurationOptionVisible,
canUseMultiKeyframeMode,
fallbackGenSpaceMode,
genSpaceUsesAudioInput,
isGenSpaceLibraryMode,
isEnhanceAvailableForMode,
modeAfterCompletedGeneration,
modeOptionValues,
} from './genspace-multi-keyframe.ts'
const allModesAvailable = {
canUseMultiKeyframe: true,
canUseRetake: true,
canUseExtend: true,
canUseIcLora: true,
}
describe('autoDurationOptionVisible', () => {
it('hides Auto in multi-keyframe mode even when the model supports it', () => {
assert.equal(autoDurationOptionVisible('multi-keyframe', true), false)
})
it('shows Auto in video mode when the model supports it', () => {
assert.equal(autoDurationOptionVisible('video', true), true)
})
it('hides Auto when the model does not support it', () => {
assert.equal(autoDurationOptionVisible('video', false), false)
})
})
describe('canUseMultiKeyframeMode', () => {
it('is false in API mode even when the local offering supports it', () => {
assert.equal(
canUseMultiKeyframeMode({
isLocalMode: false,
localCaps: { multi_keyframe: true },
enableMultipleKeyframesVideos: true,
}),
false,
)
})
it('is false in local mode when the capability is missing', () => {
assert.equal(
canUseMultiKeyframeMode({
isLocalMode: true,
localCaps: {},
enableMultipleKeyframesVideos: true,
}),
false,
)
})
it('is false in local mode when the capability is disabled', () => {
assert.equal(
canUseMultiKeyframeMode({
isLocalMode: true,
localCaps: { multi_keyframe: false },
enableMultipleKeyframesVideos: true,
}),
false,
)
})
it('is false when the Dev Panel flag is off, even in local mode with the capability', () => {
assert.equal(
canUseMultiKeyframeMode({
isLocalMode: true,
localCaps: { multi_keyframe: true },
enableMultipleKeyframesVideos: false,
}),
false,
)
})
it('is true only in local mode when the capability and Dev Panel flag are enabled', () => {
assert.equal(
canUseMultiKeyframeMode({
isLocalMode: true,
localCaps: { multi_keyframe: true },
enableMultipleKeyframesVideos: true,
}),
true,
)
})
})
describe('fallbackGenSpaceMode', () => {
it('falls back from multi-keyframe when unavailable', () => {
assert.equal(
fallbackGenSpaceMode('multi-keyframe', {
...allModesAvailable,
canUseMultiKeyframe: false,
}),
'video',
)
})
for (const [mode, flag] of [
['retake', 'canUseRetake'],
['extend', 'canUseExtend'],
['ic-lora', 'canUseIcLora'],
] as const) {
it(`falls back from ${mode} when unavailable`, () => {
assert.equal(
fallbackGenSpaceMode(mode, {
...allModesAvailable,
[flag]: false,
}),
'video',
)
})
it(`keeps ${mode} when available`, () => {
assert.equal(fallbackGenSpaceMode(mode, allModesAvailable), mode)
})
}
})
describe('modeOptionValues', () => {
it('excludes multi-keyframe when unavailable', () => {
const values = modeOptionValues({
...allModesAvailable,
canUseMultiKeyframe: false,
})
assert.equal(values.includes('multi-keyframe'), false)
})
it('includes multi-keyframe immediately after video when available', () => {
const values = modeOptionValues(allModesAvailable)
assert.deepEqual(values.slice(0, 3), ['image', 'video', 'multi-keyframe'])
})
})
describe('isGenSpaceLibraryMode', () => {
it('shows the asset library for image and video', () => {
assert.equal(isGenSpaceLibraryMode('image'), true)
assert.equal(isGenSpaceLibraryMode('video'), true)
})
it('hides the asset library in tool modes, matching retake and extend', () => {
assert.equal(isGenSpaceLibraryMode('multi-keyframe'), false)
assert.equal(isGenSpaceLibraryMode('retake'), false)
assert.equal(isGenSpaceLibraryMode('extend'), false)
assert.equal(isGenSpaceLibraryMode('ic-lora'), false)
})
})
describe('modeAfterCompletedGeneration', () => {
it('returns to video gen space after a multi-keyframe job', () => {
assert.equal(modeAfterCompletedGeneration('multi-keyframe'), 'video')
})
it('does not force a mode change for ordinary video jobs', () => {
assert.equal(modeAfterCompletedGeneration('text-to-video'), null)
assert.equal(modeAfterCompletedGeneration('image-to-video'), null)
assert.equal(modeAfterCompletedGeneration('audio-to-video'), null)
})
})
describe('isEnhanceAvailableForMode', () => {
it('includes multi-keyframe alongside video, image, and ic-lora', () => {
assert.equal(isEnhanceAvailableForMode('multi-keyframe'), true)
assert.equal(isEnhanceAvailableForMode('video'), true)
assert.equal(isEnhanceAvailableForMode('image'), true)
assert.equal(isEnhanceAvailableForMode('ic-lora'), true)
})
it('hides Enhance in retake and extend', () => {
assert.equal(isEnhanceAvailableForMode('retake'), false)
assert.equal(isEnhanceAvailableForMode('extend'), false)
})
})
describe('genSpaceUsesAudioInput', () => {
it('is only video mode, so leftover A2V audio cannot ride along with keyframes', () => {
assert.equal(genSpaceUsesAudioInput('video'), true)
assert.equal(genSpaceUsesAudioInput('multi-keyframe'), false)
assert.equal(genSpaceUsesAudioInput('image'), false)
assert.equal(genSpaceUsesAudioInput('retake'), false)
assert.equal(genSpaceUsesAudioInput('extend'), false)
assert.equal(genSpaceUsesAudioInput('ic-lora'), false)
})
})