opds-web-client
Version:
94 lines (93 loc) • 3.99 kB
JavaScript
dontMock("../DataFetcher");
var DataFetcher_1 = require("../DataFetcher");
var Cookie = require("js-cookie");
describe("DataFetcher", function () {
var mockFetch;
beforeEach(function () {
mockFetch = jest.genMockFunction();
mockFetch.mockReturnValue(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);
expect(mockFetch.mock.calls.length).toBe(1);
expect(mockFetch.mock.calls[0][0]).toBe("test url");
expect(mockFetch.mock.calls[0][1]).toEqual(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);
expect(mockFetch.mock.calls.length).toBe(1);
expect(mockFetch.mock.calls[0][0]).toBe("test url");
expect(mockFetch.mock.calls[0][1]).toEqual(Object.assign({ credentials: "same-origin", headers: {
"X-Requested-With": "XMLHttpRequest"
} }, options));
});
it("uses proxy url if provided", function () {
var proxyUrl = "http://example.com";
var fetcher = new DataFetcher_1.default({ proxyUrl: proxyUrl });
fetcher.fetch("test url");
var formData = new FormData();
formData.append("url", proxyUrl);
expect(mockFetch.mock.calls.length).toBe(1);
expect(mockFetch.mock.calls[0][0]).toBe(proxyUrl);
expect(mockFetch.mock.calls[0][1].method).toBe("POST");
expect(mockFetch.mock.calls[0][1].body.get("url").value).toEqual("test url");
});
it("prepares basic auth headers", function () {
var fetcher = new DataFetcher_1.default();
fetcher.getBasicAuthCredentials = function () { return "credentials"; };
fetcher.fetch("test url");
expect(mockFetch.mock.calls[0][1].headers["Authorization"]).toBe("Basic credentials");
});
it("sets basic auth credentials", function () {
var fetcher = new DataFetcher_1.default();
fetcher.setBasicAuthCredentials("credentials");
expect(Cookie.get(fetcher.basicAuthKey)).toBe("credentials");
});
it("gets basic auth credentials", function () {
var fetcher = new DataFetcher_1.default();
Cookie.set(fetcher.basicAuthKey, "credentials");
expect(fetcher.getBasicAuthCredentials()).toBe("credentials");
});
it("clears basic auth credentials", function () {
var fetcher = new DataFetcher_1.default();
Cookie.set(fetcher.basicAuthKey, "credentials");
fetcher.clearBasicAuthCredentials();
expect(Cookie.get(fetcher.basicAuthKey)).toBe(undefined);
});
describe("fetchOPDSData()", function () {
it("throws error if response isn't 200", function (done) {
mockFetch = jest.genMockFunction();
mockFetch.mockReturnValue(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) {
expect(err.status).toBe(401);
expect(err.response).toBe("unauthorized");
expect(err.url).toBe("test url");
done();
});
});
});
});
;
jest.