UNPKG

opds-web-client

Version:
104 lines (103 loc) 4.47 kB
"use strict"; var chai_1 = require("chai"); var sinon_1 = require("sinon"); var DataFetcher_1 = require("../DataFetcher"); var Cookie = require("js-cookie"); describe("DataFetcher", function () { var mockFetch; beforeEach(function () { mockFetch = sinon_1.stub().returns(new Promise(function (resolve, reject) { resolve({ status: 200 }); })); fetch = mockFetch; }); it("uses fetch()", function () { var options = { method: "POST", data: { test: "test" }, credentials: "same-origin" }; var fetcher = new DataFetcher_1.default(); fetcher.fetch("test url", options); chai_1.expect(mockFetch.callCount).to.equal(1); chai_1.expect(mockFetch.args[0][0]).to.equal("test url"); chai_1.expect(mockFetch.args[0][1]).to.deep.equal(Object.assign({}, options, { headers: { "X-Requested-With": "XMLHttpRequest" } })); }); it("sends credentials by default", function () { var options = { method: "POST", data: { test: "test" } }; var fetcher = new DataFetcher_1.default(); fetcher.fetch("test url", options); chai_1.expect(mockFetch.callCount).to.equal(1); chai_1.expect(mockFetch.args[0][0]).to.equal("test url"); chai_1.expect(mockFetch.args[0][1]).to.deep.equal(Object.assign({ credentials: "same-origin", headers: { "X-Requested-With": "XMLHttpRequest" } }, options)); }); it("uses proxy url if provided", function () { var MockFormData = (function () { function MockFormData() { this.data = {}; } MockFormData.prototype.append = function (key, val) { this.data[key] = val; }; MockFormData.prototype.get = function (key) { return { value: this.data[key] }; }; return MockFormData; }()); var formDataStub = sinon_1.stub(window, "FormData", MockFormData); var proxyUrl = "http://example.com"; var fetcher = new DataFetcher_1.default({ proxyUrl: proxyUrl }); fetcher.fetch("test url"); chai_1.expect(mockFetch.callCount).to.equal(1); chai_1.expect(mockFetch.args[0][0]).to.equal(proxyUrl); chai_1.expect(mockFetch.args[0][1].method).to.equal("POST"); chai_1.expect(mockFetch.args[0][1].body.get("url").value).to.equal("test url"); }); it("prepares basic auth headers", function () { var fetcher = new DataFetcher_1.default(); fetcher.getBasicAuthCredentials = function () { return "credentials"; }; fetcher.fetch("test url"); chai_1.expect(mockFetch.args[0][1].headers["Authorization"]).to.equal("Basic credentials"); }); it("sets basic auth credentials", function () { var fetcher = new DataFetcher_1.default(); fetcher.setBasicAuthCredentials("credentials"); chai_1.expect(Cookie.get(fetcher.basicAuthKey)).to.equal("credentials"); }); it("gets basic auth credentials", function () { var fetcher = new DataFetcher_1.default(); Cookie.set(fetcher.basicAuthKey, "credentials"); chai_1.expect(fetcher.getBasicAuthCredentials()).to.equal("credentials"); }); it("clears basic auth credentials", function () { var fetcher = new DataFetcher_1.default(); Cookie.set(fetcher.basicAuthKey, "credentials"); fetcher.clearBasicAuthCredentials(); chai_1.expect(Cookie.get(fetcher.basicAuthKey)).to.equal(undefined); }); describe("fetchOPDSData()", function () { it("throws error if response isn't 200", function (done) { mockFetch = sinon_1.stub().returns(new Promise(function (resolve, reject) { resolve({ status: 401, text: function () { return new Promise(function (resolve, reject) { return resolve("unauthorized"); }); } }); })); fetch = mockFetch; var fetcher = new DataFetcher_1.default(); fetcher.fetchOPDSData("test url").catch(function (err) { chai_1.expect(err.status).to.equal(401); chai_1.expect(err.response).to.equal("unauthorized"); chai_1.expect(err.url).to.equal("test url"); done(); }); }); }); });