opds-web-client
Version:
108 lines (107 loc) • 4.75 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 auth headers", function () {
var fetcher = new DataFetcher_1.default();
var credentials = { provider: "test", credentials: "credentials" };
fetcher.getAuthCredentials = function () { return credentials; };
fetcher.fetch("test url");
chai_1.expect(mockFetch.args[0][1].headers["Authorization"]).to.equal("credentials");
});
it("sets auth credentials", function () {
var fetcher = new DataFetcher_1.default();
var credentials = { provider: "test", credentials: "credentials" };
fetcher.setAuthCredentials(credentials);
chai_1.expect(Cookie.get(fetcher.authKey)).to.deep.equal(JSON.stringify(credentials));
});
it("gets auth credentials", function () {
var fetcher = new DataFetcher_1.default();
var credentials = { provider: "test", credentials: "credentials" };
Cookie.set(fetcher.authKey, JSON.stringify(credentials));
chai_1.expect(fetcher.getAuthCredentials()).to.deep.equal(credentials);
});
it("clears auth credentials", function () {
var fetcher = new DataFetcher_1.default();
var credentials = { provider: "test", credentials: "credentials" };
Cookie.set(fetcher.authKey, JSON.stringify(credentials));
fetcher.clearAuthCredentials();
chai_1.expect(Cookie.get(fetcher.authKey)).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();
});
});
});
});
;