Files
bsky-social-app/src/view/com/composer/state/videoProgress.test.ts
T

56 lines
2.2 KiB
TypeScript

import {
advanceVideoProgress,
didSkipVideoCompression,
videoProgressForPhase,
videoProgressWithinPhase,
} from './videoProgress'
describe('didSkipVideoCompression', () => {
it('distinguishes a real skip from a failed compression attempt', () => {
expect(didSkipVideoCompression(undefined)).toBe(false)
expect(didSkipVideoCompression('below-byte-threshold')).toBe(true)
expect(didSkipVideoCompression('no-webcodecs')).toBe(true)
expect(didSkipVideoCompression('gif')).toBe(true)
expect(didSkipVideoCompression('compress-error-fallback')).toBe(false)
})
})
describe('videoProgressForPhase', () => {
it('maps each phase onto one continuous timeline', () => {
expect(videoProgressForPhase('compressing', 0)).toBe(0)
expect(videoProgressForPhase('compressing', 1)).toBe(0.3)
expect(videoProgressForPhase('uploading', 0)).toBe(0.3)
expect(videoProgressForPhase('uploading', 1)).toBe(0.5)
expect(videoProgressForPhase('uploadingWithoutCompression', 0)).toBe(0)
expect(videoProgressForPhase('uploadingWithoutCompression', 1)).toBe(0.5)
expect(videoProgressForPhase('processing', 0)).toBe(0.5)
expect(videoProgressForPhase('processing', 0.5)).toBe(0.75)
expect(videoProgressForPhase('processing', 1)).toBe(1)
})
it('clamps invalid phase progress', () => {
expect(videoProgressForPhase('uploading', -1)).toBe(0.3)
expect(videoProgressForPhase('uploading', 2)).toBe(0.5)
})
})
describe('videoProgressWithinPhase', () => {
it('maps global progress back to phase-local progress', () => {
expect(videoProgressWithinPhase('compressing', 0)).toBe(0)
expect(videoProgressWithinPhase('compressing', 0.15)).toBe(0.5)
expect(videoProgressWithinPhase('compressing', 0.3)).toBe(1)
})
it('clamps progress outside the phase', () => {
expect(videoProgressWithinPhase('compressing', -1)).toBe(0)
expect(videoProgressWithinPhase('compressing', 1)).toBe(1)
})
})
describe('advanceVideoProgress', () => {
it('does not move backwards when a transport retries or falls back', () => {
const progressed = advanceVideoProgress(0.5, 'uploading', 0.8)
expect(advanceVideoProgress(progressed, 'uploading', 0)).toBe(progressed)
})
})