UNPKG

bunshine

Version:

A Bun HTTP & WebSocket server that is a little ray of sunshine.

163 lines (161 loc) 4.08 kB
import { describe, expect, it } from 'bun:test'; import parseRangeHeader from './parseRangeHeader'; describe('parseRangeHeader', () => { it('should handle null header', () => { const result = parseRangeHeader({ rangeHeader: null, totalFileSize: 1000, }); expect(result).toEqual({ slice: null, contentLength: 1000, status: 200, }); }); it('should handle empty header', () => { const result = parseRangeHeader({ rangeHeader: '', totalFileSize: 1000, }); expect(result).toEqual({ slice: null, contentLength: 1000, status: 200, }); }); it('should return 416 on invalid header', () => { const result = parseRangeHeader({ rangeHeader: 'foobar', totalFileSize: 1000, }); expect(result).toEqual({ slice: null, contentLength: null, status: 416, }); }); it('should return 416 on invalid byte range', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=a-z', totalFileSize: 1000, }); expect(result).toEqual({ slice: null, contentLength: null, status: 416, }); }); it('should return 416 on out-of-bounds byte range', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=0-5000', totalFileSize: 1000, }); expect(result).toEqual({ slice: null, contentLength: null, status: 416, }); }); it('should return 200 on full byte range', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=0-999', totalFileSize: 1000, }); expect(result).toEqual({ slice: null, contentLength: 1000, status: 200, }); }); it('should return 206 on first bytes', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=0-99', totalFileSize: 1000, }); expect(result).toEqual({ slice: { start: 0, end: 99 }, contentLength: 100, status: 206, }); }); it('should return 206 on middle bytes', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=100-199', totalFileSize: 1000, }); expect(result).toEqual({ slice: { start: 100, end: 199 }, contentLength: 100, status: 206, }); }); it('should return 206 on end bytes', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=900-999', totalFileSize: 1000, }); expect(result).toEqual({ slice: { start: 900, end: 999 }, contentLength: 100, status: 206, }); }); it('should return 206 on open-ended request', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=900-', totalFileSize: 1000, defaultChunkSize: 1000, }); expect(result).toEqual({ slice: { start: 900, end: 999 }, contentLength: 100, status: 206, }); }); it('should return 416 on ranged empty file', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=0-', totalFileSize: 0, }); expect(result).toEqual({ slice: null, contentLength: 0, status: 416, }); }); it('should return 206 on open-ended request from 0', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=0-', totalFileSize: 1000, defaultChunkSize: 100, }); expect(result).toEqual({ slice: { start: 0, end: 99 }, contentLength: 100, status: 206, }); }); it('should return 206 on open-ended request (chunk is smaller)', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=900-', totalFileSize: 1000, defaultChunkSize: 10, }); expect(result).toEqual({ slice: { start: 900, end: 909 }, contentLength: 10, status: 206, }); }); it('should return 206 on last bytes', () => { const result = parseRangeHeader({ rangeHeader: 'bytes=-100', totalFileSize: 1000, }); expect(result).toEqual({ slice: { start: 900, end: 999 }, contentLength: 100, status: 206, }); }); });