Files
parenthese/backend/test/media-range.test.ts
T
IliesAllali 856a80d111 Souvenirs : envoi en flux et par plages (Range), pour les vidéos sur Safari (#162)
* Souvenirs : envoi en flux et par plages (Range, 206), pour Safari ; le fichier ne passe plus en entier en mémoire

* Range : fichier vide refusé en 416 ; test d'un souvenir en attente demandé par morceaux
2026-10-26 12:33:24 +01:00

32 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { parseByteRange } from '../src/lib/media-files.js'
// Plages demandées par les navigateurs pour lire une vidéo (Safari ne lit rien sans elles)
describe('parseByteRange', () => {
it('lit les plages que demandent Safari et Chrome', () => {
expect(parseByteRange('bytes=0-1', 1000)).toEqual({ start: 0, end: 1 })
expect(parseByteRange('bytes=0-', 1000)).toEqual({ start: 0, end: 999 })
expect(parseByteRange('bytes=500-', 1000)).toEqual({ start: 500, end: 999 })
expect(parseByteRange('bytes=-100', 1000)).toEqual({ start: 900, end: 999 })
})
it('borne la fin à la taille du fichier', () => {
expect(parseByteRange('bytes=900-5000', 1000)).toEqual({ start: 900, end: 999 })
expect(parseByteRange('bytes=-5000', 1000)).toEqual({ start: 0, end: 999 })
})
it('refuse une plage hors du fichier', () => {
expect(parseByteRange('bytes=1000-', 1000)).toBe('unsatisfiable')
expect(parseByteRange('bytes=5-2', 1000)).toBe('unsatisfiable')
expect(parseByteRange('bytes=-0', 1000)).toBe('unsatisfiable')
expect(parseByteRange('bytes=-5', 0)).toBe('unsatisfiable')
})
it('envoie tout sans plage lisible', () => {
expect(parseByteRange(undefined, 1000)).toBeNull()
expect(parseByteRange('bytes=-', 1000)).toBeNull()
expect(parseByteRange('bytes=0-1,5-9', 1000)).toBeNull()
expect(parseByteRange('items=0-1', 1000)).toBeNull()
})
})