opds-web-client
Version:
737 lines (736 loc) • 39.3 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var chai_1 = require("chai");
var sinon_1 = require("sinon");
var auth_1 = require("./../utils/auth");
var fetchMock = require("fetch-mock");
var actions_1 = require("../actions");
var DataFetcher_1 = require("../__mocks__/DataFetcher");
var DataFetcher_2 = require("../DataFetcher");
var testData = {
lanes: [],
books: [
{
id: "test id",
url: "http://example.com/book",
title: "test title"
}
]
};
var mockFetcher = new DataFetcher_1.default();
var mockActions = new actions_1.default(mockFetcher);
var fetcher = new DataFetcher_2.default();
var actions = new actions_1.default(fetcher);
describe("actions", function () {
afterEach(function () {
fetchMock.restore();
});
describe("fetchBlob", function () {
var type = "TEST";
var url = "test url";
it("dispatches request and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = { blob: function () { return "blob"; }, ok: true };
return [4 /*yield*/, mockActions.fetchBlob(type, url)(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
// Only the request dispatch has the url
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[0][0].url).to.equal(url);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.SUCCESS));
(0, chai_1.expect)(data).to.equal("blob");
return [2 /*return*/];
}
});
}); });
it("dispatches failure on bad response", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_1, expectedError;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = { ok: false, status: 500 };
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, mockActions.fetchBlob(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_1 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[0][0].url).to.equal(url);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
expectedError = {
status: 500,
response: "Response was not okay and was not retried (wasn't the result of a redirect).",
url: url
};
(0, chai_1.expect)(dispatch.args[1][0].error).to.deep.equal(expectedError);
(0, chai_1.expect)(err_1).to.deep.equal(expectedError);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
it("dispatches failure on no response", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_2, expectedError;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = false;
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, mockActions.fetchBlob(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_2 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[0][0].url).to.equal(url);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
expectedError = "test error";
(0, chai_1.expect)(dispatch.args[1][0].error).to.equal(expectedError);
(0, chai_1.expect)(err_2).to.equal(expectedError);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
});
describe("fetchJSON", function () {
var type = "TEST";
var url = "test-url";
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, testData, data, fetchargs;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
testData = { test: 1 };
fetchMock.mock(url, { status: 200, body: testData });
return [4 /*yield*/, actions.fetchJSON(type, url)(dispatch)];
case 1:
data = _a.sent();
// fetch tests
(0, chai_1.expect)(fetchMock.calls().length).to.equal(1);
fetchargs = fetchMock.calls();
(0, chai_1.expect)(fetchargs[0][0]).to.equal("/test-url");
// dispatch tests
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[0][0].url).to.equal(url);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.SUCCESS));
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal("".concat(type, "_").concat(actions_1.default.LOAD));
(0, chai_1.expect)(dispatch.args[2][0].data).to.deep.equal(testData);
(0, chai_1.expect)(data).to.deep.equal(testData);
return [2 /*return*/];
}
});
}); });
it("dispatches failure on non-json response", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_3, expectedError;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
fetchMock.mock(url, { status: 200, body: function () { return Promise.reject("nope"); } });
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, actions.fetchJSON(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_3 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[0][0].url).to.equal(url);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
expectedError = {
status: 200,
response: "Non-json response",
url: url
};
(0, chai_1.expect)(dispatch.args[1][0].error).to.deep.equal(expectedError);
(0, chai_1.expect)(err_3).to.deep.equal(expectedError);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
it("dispatches failure on bad response with problem detail", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_4, expectedError;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
fetchMock.mock(url, {
status: 500,
body: function () { return Promise.reject({ detail: "detail" }); }
});
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, actions.fetchJSON(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_4 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
expectedError = {
status: 500,
response: "Request failed",
url: url
};
(0, chai_1.expect)(dispatch.args[1][0].error).to.deep.equal(expectedError);
(0, chai_1.expect)(err_4).to.deep.equal(expectedError);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
it("dispatches failure on bad response without problem detail", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_5, expectedError;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
fetchMock.mock(url, { status: 500, body: function () { return Promise.reject(""); } });
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, actions.fetchJSON(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_5 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
expectedError = {
status: 500,
response: "Request failed",
url: url
};
(0, chai_1.expect)(dispatch.args[1][0].error).to.deep.equal(expectedError);
(0, chai_1.expect)(err_5).to.deep.equal(expectedError);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
it("dispatches failure on no response", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_6, expectedError;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
fetchMock.mock(url, function () { return Promise.reject({ message: "test error" }); });
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, actions.fetchJSON(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_6 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
expectedError = {
status: null,
response: "test error",
url: url
};
(0, chai_1.expect)(dispatch.args[1][0].error).to.deep.equal(expectedError);
(0, chai_1.expect)(err_6).to.deep.equal(expectedError);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
});
describe("fetchOPDS", function () {
var type = "TEST";
var url = "/test-url";
it("dispatches request, success, and load", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = testData;
return [4 /*yield*/, mockActions.fetchOPDS(type, url)(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.SUCCESS));
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal("".concat(type, "_").concat(actions_1.default.LOAD));
(0, chai_1.expect)(data).to.deep.equal(testData);
return [2 /*return*/];
}
});
}); });
it("dispatches failure on bad response", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, err_7;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = false;
mockFetcher.testError = "test error";
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, mockActions.fetchOPDS(type, url)(dispatch)];
case 2:
_a.sent();
// shouldn't get here
(0, chai_1.expect)(false).to.equal(true);
return [3 /*break*/, 4];
case 3:
err_7 = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
(0, chai_1.expect)(dispatch.args[1][0].error).to.equal("test error");
(0, chai_1.expect)(err_7).to.equal("test error");
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); });
});
describe("request", function () {
it("creates an action", function () {
var type = "data type";
var action = actions.request(type, "url");
(0, chai_1.expect)(action.type).to.equal("".concat(type, "_").concat(actions_1.default.REQUEST));
(0, chai_1.expect)(action.url).to.equal("url");
});
});
describe("success", function () {
it("creates an action", function () {
var type = "data type";
var action = actions.success(type);
(0, chai_1.expect)(action.type).to.equal("".concat(type, "_").concat(actions_1.default.SUCCESS));
});
});
describe("failure", function () {
it("creates an action", function () {
var type = "data type";
var err = { url: "url", response: "response", status: 400 };
var action = actions.failure(type, err);
(0, chai_1.expect)(action.type).to.equal("".concat(type, "_").concat(actions_1.default.FAILURE));
(0, chai_1.expect)(action.error).to.eq(err);
});
});
describe("load", function () {
it("creates an action", function () {
var type = "data type";
var action = actions.load(type, 2);
(0, chai_1.expect)(action.type).to.equal("".concat(type, "_").concat(actions_1.default.LOAD));
(0, chai_1.expect)(action.data).to.equal(2);
});
});
describe("clear", function () {
it("creates an action", function () {
var type = "data type";
var action = actions.clear(type);
(0, chai_1.expect)(action.type).to.equal("".concat(type, "_").concat(actions_1.default.CLEAR));
});
});
describe("fetchCollection", function () {
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = testData;
return [4 /*yield*/, mockActions.fetchCollection("http://example.com/feed")(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.COLLECTION_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.COLLECTION_SUCCESS);
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal(actions_1.default.COLLECTION_LOAD);
(0, chai_1.expect)(data).to.equal(testData);
return [2 /*return*/];
}
});
}); });
});
describe("fetchPage", function () {
it("dispatches request, success, and load", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = testData;
return [4 /*yield*/, mockActions.fetchPage("http://example.com/feed")(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.PAGE_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.PAGE_SUCCESS);
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal(actions_1.default.PAGE_LOAD);
(0, chai_1.expect)(data).to.equal(testData);
return [2 /*return*/];
}
});
}); });
});
describe("fetchBook", function () {
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = testData;
return [4 /*yield*/, mockActions.fetchBook("http://example.com/book")(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.BOOK_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.BOOK_SUCCESS);
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal(actions_1.default.BOOK_LOAD);
(0, chai_1.expect)(data).to.equal(testData);
return [2 /*return*/];
}
});
}); });
});
describe("fetchSearchDescription", function () {
it("dispatches load", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = testData;
return [4 /*yield*/, mockActions.fetchSearchDescription("http://example.com/search")(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(1);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.SEARCH_DESCRIPTION_LOAD);
(0, chai_1.expect)(data).to.equal(testData);
return [2 /*return*/];
}
});
}); });
});
describe("clearCollection", function () {
it("creates an action", function () {
var action = actions.clearCollection();
(0, chai_1.expect)(action.type).to.equal("".concat(actions_1.default.COLLECTION, "_").concat(actions_1.default.CLEAR));
});
});
describe("closeError", function () {
it("creates an action", function () {
var action = actions.closeError();
(0, chai_1.expect)(action.type).to.equal(actions_1.default.CLOSE_ERROR);
});
});
describe("loadBook", function () {
it("creates an action", function () {
var data = { id: "1", title: "title" };
var action = actions.loadBook(data, "url");
(0, chai_1.expect)(action.type).to.equal("".concat(actions_1.default.BOOK, "_").concat(actions_1.default.LOAD));
(0, chai_1.expect)(action.data).to.eq(data);
(0, chai_1.expect)(action.url).to.equal("url");
});
});
describe("clearBook", function () {
it("creates an action", function () {
var action = actions.clearBook();
(0, chai_1.expect)(action.type).to.equal("".concat(actions_1.default.BOOK, "_").concat(actions_1.default.CLEAR));
});
});
describe("updateBook", function () {
var borrowUrl = "http://example.com/book/borrow";
var fulfillmentUrl = "http://example.com/book/fulfill";
var mimeType = "mime/type";
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = { fulfillmentUrl: fulfillmentUrl, mimeType: mimeType };
return [4 /*yield*/, mockActions.updateBook(borrowUrl)(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.UPDATE_BOOK_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.UPDATE_BOOK_SUCCESS);
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal(actions_1.default.UPDATE_BOOK_LOAD);
(0, chai_1.expect)(data).to.equal(mockFetcher.testData);
return [2 /*return*/];
}
});
}); });
});
describe("fulfillBook", function () {
var fulfillmentUrl = "http://example.com/book/fulfill";
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = { blob: function () { return "blob"; }, ok: true };
return [4 /*yield*/, mockActions.fulfillBook(fulfillmentUrl)(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.FULFILL_BOOK_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.FULFILL_BOOK_SUCCESS);
(0, chai_1.expect)(data).to.equal("blob");
return [2 /*return*/];
}
});
}); });
});
describe("indirectFulfillBook", function () {
var fulfillmentUrl = "http://example.com/book/fulfill";
var fulfillmentType = "text/html;profile=http://librarysimplified.org/terms/profiles/streaming-media";
var indirectUrl = "http://example.com/reader";
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, url;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = {
fulfillmentLinks: [{ url: indirectUrl, type: fulfillmentType }]
};
return [4 /*yield*/, mockActions.indirectFulfillBook(fulfillmentUrl, fulfillmentType)(dispatch)];
case 1:
url = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.FULFILL_BOOK_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.FULFILL_BOOK_SUCCESS);
(0, chai_1.expect)(url).to.equal(indirectUrl);
return [2 /*return*/];
}
});
}); });
});
describe("fetchLoans", function () {
var loansUrl = "http://example.com/loans";
it("dispatches request, load, and success", function () { return __awaiter(void 0, void 0, void 0, function () {
var dispatch, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
dispatch = (0, sinon_1.stub)();
mockFetcher.resolve = true;
mockFetcher.testData = testData;
return [4 /*yield*/, mockActions.fetchLoans(loansUrl)(dispatch)];
case 1:
data = _a.sent();
(0, chai_1.expect)(dispatch.callCount).to.equal(3);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.LOANS_REQUEST);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.LOANS_SUCCESS);
(0, chai_1.expect)(dispatch.args[2][0].type).to.equal(actions_1.default.LOANS_LOAD);
(0, chai_1.expect)(data).to.equal(testData);
return [2 /*return*/];
}
});
}); });
});
describe("showAuthForm", function () {
it("creates an action", function () {
var callback = (0, sinon_1.stub)();
var cancel = (0, sinon_1.stub)();
var providers = [];
var action = actions.showAuthForm(callback, cancel, providers, "title");
(0, chai_1.expect)(action.type).to.equal(actions_1.default.SHOW_AUTH_FORM);
(0, chai_1.expect)(action.callback).to.equal(callback);
(0, chai_1.expect)(action.cancel).to.equal(cancel);
(0, chai_1.expect)(action.providers).to.deep.equal(providers);
});
it("flattens server saml providers", function () {
var callback = (0, sinon_1.stub)();
var cancel = (0, sinon_1.stub)();
var samlPlugin = {
type: "saml-type",
lookForCredentials: (0, sinon_1.stub)(),
buttonComponent: function () { return null; }
};
var serverSamlProvider = {
id: auth_1.SAML_AUTH_TYPE,
plugin: samlPlugin,
method: {
type: auth_1.SAML_AUTH_TYPE,
links: [
{
privacy_statement_urls: [],
logo_urls: [],
display_names: [{ language: "en", value: "Saml Idp 1" }],
href: "/saml-href-1",
rel: "authenticate",
descriptions: [{ language: "en", value: "Some description" }],
information_urls: []
},
{
privacy_statement_urls: [],
logo_urls: [],
display_names: [{ language: "en", value: "Saml Idp 2" }],
href: "/saml-href-2",
rel: "authenticate",
descriptions: [{ language: "en", value: "Some description" }],
information_urls: []
}
]
}
};
var providers = [serverSamlProvider];
var action = actions.showAuthForm(callback, cancel, providers, "title");
(0, chai_1.expect)(action.type).to.equal(actions_1.default.SHOW_AUTH_FORM);
(0, chai_1.expect)(action.callback).to.equal(callback);
(0, chai_1.expect)(action.cancel).to.equal(cancel);
var expectedProviders = [
{
id: "/saml-href-1",
plugin: samlPlugin,
method: {
href: "/saml-href-1",
description: "Saml Idp 1",
type: auth_1.SAML_AUTH_TYPE
}
},
{
id: "/saml-href-2",
plugin: samlPlugin,
method: {
href: "/saml-href-2",
description: "Saml Idp 2",
type: auth_1.SAML_AUTH_TYPE
}
}
];
console.log(action.providers);
(0, chai_1.expect)(action.providers).to.deep.equal(expectedProviders);
});
});
describe("closeErrorAndHideAuthForm", function () {
it("closes error message", function () {
var dispatch = (0, sinon_1.stub)();
actions.closeErrorAndHideAuthForm()(dispatch);
(0, chai_1.expect)(dispatch.callCount).to.equal(2);
(0, chai_1.expect)(dispatch.args[0][0].type).to.equal(actions_1.default.CLOSE_ERROR);
(0, chai_1.expect)(dispatch.args[1][0].type).to.equal(actions_1.default.HIDE_AUTH_FORM);
});
});
describe("hideAuthForm", function () {
it("creates an action", function () {
var action = actions.hideAuthForm();
(0, chai_1.expect)(action.type).to.equal(actions_1.default.HIDE_AUTH_FORM);
});
});
describe("saveAuthCredentials", function () {
it("sets fetcher credentials", function () {
var credentials = { provider: "test", credentials: "credentials" };
fetcher.setAuthCredentials = (0, sinon_1.stub)();
actions.saveAuthCredentials(credentials);
(0, chai_1.expect)(fetcher.setAuthCredentials.callCount).to.equal(1);
(0, chai_1.expect)(fetcher.setAuthCredentials.args[0][0]).to.deep.equal(credentials);
});
});
describe("clearAuthCredentials", function () {
it("clears fetcher credentials", function () {
fetcher.clearAuthCredentials = (0, sinon_1.stub)();
actions.clearAuthCredentials();
(0, chai_1.expect)(fetcher.clearAuthCredentials.callCount).to.equal(1);
});
});
describe("setPreference", function () {
it("creates an action", function () {
var action = actions.setPreference("key", "value");
(0, chai_1.expect)(action.type).to.equal(actions_1.default.SET_PREFERENCE);
(0, chai_1.expect)(action.key).to.equal("key");
(0, chai_1.expect)(action.value).to.equal("value");
});
});
});
;