opds-web-client
Version:
104 lines (103 loc) • 4.47 kB
JavaScript
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();
});
});
});
});
;