import { parseRangeHeader } from "../src/parseRangeHeader"; import { SinonSandbox, createSandbox } from "sinon"; import { Logger } from "../src/Logger"; import { expect } from "chai"; import { RangeParserError } from "../src/RangeParserError"; describe("parseRangeHeader tests", () => { let sandbox: SinonSandbox; let logger: Logger; beforeEach(() => { sandbox = createSandbox(); logger = { debug: sandbox.stub() as (message: string, extra?: any) => void }; }); afterEach(() => { sandbox.restore(); }); it("returns null if range is not specified", () => { let value = parseRangeHeader("", 10, logger); expect(value).to.be.equal(null); value = parseRangeHeader(null, 10, logger); expect(value).to.be.equal(null); }); it("returns null if total size is zero", () => { let value = parseRangeHeader("bytes=0-5", 0, logger); expect(value).to.be.equal(null); }); it("if end is not provided, sets end to the last byte (totalSize - 1).", () => { let value = parseRangeHeader("bytes=0-", 10, logger); expect(value).to.be.deep.equal({ start: 0, end: 9 }); }); it('if start is not provided, set it to the offset of last "end" bytes from the end of the file.', () => { let value = parseRangeHeader("bytes=-5", 10, logger); expect(value).to.be.deep.equal({ start: 5, end: 9 }); }); it("handles invalid ranges", () => { try { parseRangeHeader("bytes=6-5", 10, logger); } catch (error) { expect(error).that.be.instanceOf(RangeParserError); } try { parseRangeHeader("bytes=6-7", 10, logger); } catch (error) { expect(error).that.be.instanceOf(RangeParserError); } try { parseRangeHeader("bytes=6-11", 10, logger); } catch (error) { expect(error).that.be.instanceOf(RangeParserError); } }); it("returns a valid parsed range.", () => { let value = parseRangeHeader("bytes=0-5", 10, logger); expect(value).to.be.deep.equal({ start: 0, end: 5 }); }); });