56 lines
2.2 KiB
TypeScript
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)
|
|
})
|
|
})
|