opds-web-client
Version:
126 lines (125 loc) • 7.09 kB
JavaScript
autoMockOff();
var React = require("react");
var enzyme_1 = require("enzyme");
var BookDetails_1 = require("../BookDetails");
var BorrowButton_1 = require("../BorrowButton");
var DownloadButton_1 = require("../DownloadButton");
var book = {
id: "urn:librarysimplified.org/terms/id/3M%20ID/crrmnr9",
url: "http://circulation.librarysimplified.org/works/3M/crrmnr9",
title: "The Mayan Secrets",
authors: ["Clive Cussler", "Thomas Perry"],
contributors: ["contributor 1"],
summary: "<b>Sam and Remi Fargo race for treasure—and survival—in this lightning-paced new adventure from #1<i> New York Times</i> bestselling author Clive Cussler.</b><br /><br />Husband-and-wife team Sam and Remi Fargo are in Mexico when they come upon a remarkable discovery—the mummified remainsof a man clutching an ancient sealed pot. Within the pot is a Mayan book larger than any known before.<br /><br />The book contains astonishing information about the Mayans, their cities, and about mankind itself. The secrets are so powerful that some people would do anything to possess them—as the Fargos are about to find out. Many men and women are going to die for that book.",
imageUrl: "https://dlotdqc6pnwqb.cloudfront.net/3M/crrmnr9/cover.jpg",
openAccessLinks: [{ url: "secrets.epub", type: "application/epub+zip" }],
borrowUrl: "borrow url",
publisher: "Penguin Publishing Group",
published: "February 29, 2016",
categories: ["category 1", "category 2"]
};
describe("BookDetails", function () {
var wrapper;
beforeEach(function () {
wrapper = enzyme_1.shallow(React.createElement(BookDetails_1.default, {book: book, borrowBook: jest.genMockFunction(), fulfillBook: jest.genMockFunction(), indirectFulfillBook: jest.genMockFunction()}));
});
it("shows cover", function () {
var coverImage = wrapper.find("img");
expect(coverImage.props().src).toBe(book.imageUrl);
});
it("shows title", function () {
var title = wrapper.find("h1");
expect(title.text()).toBe(book.title);
});
it("shows authors", function () {
var author = wrapper.find(".bookDetailsAuthors");
expect(author.text()).toBe(book.authors.join(", "));
});
it("shows contributors", function () {
var contributor = wrapper.find(".bookDetailsContributors");
expect(contributor.text()).toBe("Contributors: " + book.contributors.join(", "));
});
it("shows publisher", function () {
var publisher = wrapper.find(".bookDetailsPublisher");
expect(publisher.text()).toBe("Publisher: " + book.publisher);
});
it("doesn't show publisher when there isn't one", function () {
var bookCopy = Object.assign({}, book, {
publisher: null
});
wrapper = enzyme_1.shallow(React.createElement(BookDetails_1.default, {book: bookCopy, borrowBook: jest.genMockFunction(), fulfillBook: jest.genMockFunction(), indirectFulfillBook: jest.genMockFunction()}));
var publisher = wrapper.find(".bookDetailsPublisher");
expect(publisher.length).toBe(0);
});
it("shows publish date", function () {
var published = wrapper.find(".bookDetailsPublished");
expect(published.text()).toBe("Published: " + book.published);
});
it("shows categories", function () {
var categories = wrapper.find(".bookDetailsCategories");
expect(categories.text()).toBe("Categories: category 1, category 2");
});
it("doesn't show categories when there aren't any", function () {
var bookCopy = Object.assign({}, book, { categories: [] });
wrapper = enzyme_1.shallow(React.createElement(BookDetails_1.default, {book: bookCopy, borrowBook: jest.genMockFunction(), fulfillBook: jest.genMockFunction(), indirectFulfillBook: jest.genMockFunction()}));
var categories = wrapper.find(".bookDetailsCategories");
expect(categories.length).toBe(0);
});
it("shows summary", function () {
var summary = wrapper.find(".bookDetailsSummary");
expect(summary.html()).toContain("Sam and Remi");
});
it("shows download button for open access url", function () {
var button = wrapper.find(DownloadButton_1.default);
expect(button.props().url).toBe("secrets.epub");
expect(button.props().mimeType).toBe("application/epub+zip");
expect(button.props().isPlainLink).toBe(true);
});
it("shows borrow/hold button", function () {
var bookCopy = Object.assign({}, book, {
borrowUrl: "borrow url"
});
var borrowBook = jest.genMockFunction();
wrapper = enzyme_1.shallow(React.createElement(BookDetails_1.default, {book: bookCopy, borrowBook: borrowBook, fulfillBook: jest.genMockFunction(), indirectFulfillBook: jest.genMockFunction()}));
var button = wrapper.find(BorrowButton_1.default);
expect(button.children().text()).toBe("Borrow");
button.props().borrow();
expect(borrowBook.mock.calls.length).toBe(1);
expect(borrowBook.mock.calls[0][0]).toBe(bookCopy.borrowUrl);
wrapper.setProps({
book: Object.assign({}, bookCopy, {
copies: { total: 2, available: 0 }
})
});
button = wrapper.find(BorrowButton_1.default);
expect(button.children().text()).toBe("Hold");
});
it("shows fulfill button if there's no download button", function () {
var link = { url: "fulfillment url", type: "application/vnd.adobe.adept+xml" };
var bookCopy = Object.assign({}, book, {
openAccessLinks: [],
fulfillmentLinks: [link]
});
var fulfillBook = jest.genMockFunction();
var indirectFulfillBook = jest.genMockFunction();
wrapper = enzyme_1.shallow(React.createElement(BookDetails_1.default, {book: bookCopy, borrowBook: jest.genMockFunction(), fulfillBook: fulfillBook, indirectFulfillBook: indirectFulfillBook, isSignedIn: false}));
var button = wrapper.find(DownloadButton_1.default);
expect(button.props().fulfill).toBe(fulfillBook);
expect(button.props().indirectFulfill).toBe(indirectFulfillBook);
expect(button.props().url).toBe(link.url);
expect(button.props().title).toBe(bookCopy.title);
expect(button.props().mimeType).toBe(link.type);
expect(button.props().isPlainLink).toBe(true);
});
it("shows 'on hold'", function () {
var bookCopy = Object.assign({}, book, {
openAccessLinks: [],
availability: { status: "reserved" }
});
wrapper = enzyme_1.shallow(React.createElement(BookDetails_1.default, {book: bookCopy, borrowBook: jest.genMockFunction(), fulfillBook: jest.genMockFunction(), indirectFulfillBook: jest.genMockFunction()}));
var button = wrapper.find("button");
expect(button.text()).toBe("On Hold");
expect(button.props().className).toContain("disabled");
});
});
;
jest.