opds-web-client
Version:
114 lines (113 loc) • 5.82 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var chai_1 = require("chai");
var sinon_1 = require("sinon");
var React = require("react");
var enzyme_1 = require("enzyme");
var Search_1 = require("../Search");
var routing_1 = require("../../__mocks__/routing");
describe("Search", function () {
it("fetches the search description", function () {
var fetchSearchDescription = (0, sinon_1.stub)();
var url = "test url";
var context = (0, routing_1.mockRouterContext)();
var search = (0, enzyme_1.shallow)(React.createElement(Search_1.default, { url: url, fetchSearchDescription: fetchSearchDescription }), { context: context });
(0, chai_1.expect)(fetchSearchDescription.callCount).to.equal(1);
(0, chai_1.expect)(fetchSearchDescription.args[0][0]).to.equal("test url");
});
it("does not fetch the search description again if url doesn't change", function () {
var fetchSearchDescription = (0, sinon_1.stub)();
var url = "test url";
var searchData = {
description: "description",
shortName: "shortName",
template: function (s) { return s; }
};
var context = (0, routing_1.mockRouterContext)();
var wrapper = (0, enzyme_1.shallow)(React.createElement(Search_1.default, { url: url, fetchSearchDescription: fetchSearchDescription }), { context: context });
wrapper.setProps({ url: url, searchData: searchData });
(0, chai_1.expect)(fetchSearchDescription.callCount).to.equal(1);
});
it("should have an aria-label for the input", function () {
var fetchSearchDescription = (0, sinon_1.stub)();
var searchData = {
description: "description",
shortName: "shortName",
template: function (s) { return s; }
};
var context = (0, routing_1.mockRouterContext)();
var wrapper = (0, enzyme_1.shallow)(React.createElement(Search_1.default, { searchData: searchData, fetchSearchDescription: fetchSearchDescription }), { context: context });
var input = wrapper.find("input");
(0, chai_1.expect)(input.length).to.equal(1);
(0, chai_1.expect)(input.prop("aria-label")).to.equal("Enter search keyword or keywords");
});
it("shows the search form with bootstrap classes", function () {
var searchData = {
description: "description",
shortName: "shortName",
template: function (s) { return s; }
};
var context = (0, routing_1.mockRouterContext)();
var wrapper = (0, enzyme_1.shallow)(React.createElement(Search_1.default, { searchData: searchData }), { context: context });
var form = wrapper.find("form");
var input = wrapper.find("input");
var button = wrapper.find("button");
(0, chai_1.expect)(form.hasClass("form-inline")).to.equal(true);
(0, chai_1.expect)(input).to.be.ok;
(0, chai_1.expect)(input.props().placeholder).to.equal("shortName");
(0, chai_1.expect)(input.hasClass("form-control")).to.equal(true);
(0, chai_1.expect)(button).to.be.ok;
(0, chai_1.expect)(button.hasClass("btn")).to.equal(true);
});
it("fetches the search feed", function () {
var searchData = {
description: "description",
shortName: "shortName",
template: function (s) { return s + " template"; }
};
var push = (0, sinon_1.stub)();
var context = (0, routing_1.mockRouterContext)(push);
var wrapper = (0, enzyme_1.mount)(React.createElement(Search_1.default, { searchData: searchData }), { context: context });
var form = wrapper.find("form").first();
(0, chai_1.expect)(form).to.be.ok;
var input = wrapper.find("input").getDOMNode();
input.value = "test";
form.simulate("submit");
(0, chai_1.expect)(push.callCount).to.equal(1);
(0, chai_1.expect)(push.args[0][0]).to.equal(context.pathFor("test template", null));
});
it("escapes search terms", function () {
var searchData = {
description: "description",
shortName: "shortName",
template: function (s) { return s + " template"; }
};
var push = (0, sinon_1.stub)();
var context = (0, routing_1.mockRouterContext)(push);
var wrapper = (0, enzyme_1.mount)(React.createElement(Search_1.default, { searchData: searchData }), { context: context });
var form = wrapper.find("form").first();
(0, chai_1.expect)(form).to.be.ok;
var input = wrapper.find("input").getDOMNode();
input.value = "Indésirable";
form.simulate("submit");
(0, chai_1.expect)(push.callCount).to.equal(1);
(0, chai_1.expect)(push.args[0][0]).to.equal(context.pathFor("Ind%C3%A9sirable template", null));
});
it("should add 'all' to language query in search term", function () {
var searchData = {
description: "description",
shortName: "shortName",
template: function (s) { return s + " template"; }
};
var push = (0, sinon_1.stub)();
var context = (0, routing_1.mockRouterContext)(push);
var wrapper = (0, enzyme_1.mount)(React.createElement(Search_1.default, { searchData: searchData, allLanguageSearch: true }), { context: context });
var form = wrapper.find("form").first();
(0, chai_1.expect)(form).to.be.ok;
var input = wrapper.find("input").getDOMNode();
input.value = "hamlet";
form.simulate("submit");
(0, chai_1.expect)(push.callCount).to.equal(1);
(0, chai_1.expect)(push.args[0][0]).to.equal(context.pathFor("hamlet template&language=all", null));
});
});