jam-cloud/web/spec/javascripts/searcher.spec.js

197 lines
7.0 KiB
JavaScript

(function(context) {
describe("searcher.js tests", function() {
beforeEach(function() {
JKTestUtils.loadFixtures('/spec/javascripts/fixtures/searcher.htm');
});
describe("Empty Search", function() {
// See the markup in fixtures/searcher.htm
var searcher;
var ajaxSpy;
var fakeApp = {
ajaxError: function() {
console.debug("ajaxError");
}
};
beforeEach(function() {
spyOn($, "ajax").andCallFake(function(opts) {
opts.success(TestResponses.emptySearch);
});
searcher = new JK.Searcher(fakeApp);
searcher.initialize();
});
it("No Results message shown", function() {
// Workaround for key events not being reflected in val() calls
$('.searchtextinput').val('AA');
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').focus();
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
expect($('.searchresults .emptyresult').length).toEqual(1);
});
});
describe("Full Search", function() {
// See the markup in fixtures/searcher.htm
var searcher;
var ajaxSpy;
var fakeApp = {
ajaxError: function() {
console.debug("ajaxError");
}
};
beforeEach(function() {
spyOn($, "ajax").andCallFake(function(opts) {
opts.success(TestResponses.fullSearch);
});
searcher = new JK.Searcher(fakeApp);
searcher.initialize();
});
it("No Results message shown", function() {
// Workaround for key events not being reflected in val() calls
$('.searchtextinput').val('AA');
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').focus();
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
expect($('.searchresults h2').length).toEqual(4);
});
});
describe("Search Tests", function() {
// See the markup in fixtures/searcher.htm
var searcher;
var ajaxSpy;
var fakeApp = {
ajaxError: function() {
console.debug("ajaxError");
}
};
beforeEach(function() {
spyOn($, "ajax").andCallFake(function(opts) {
opts.success(TestResponses.search);
});
searcher = new JK.Searcher(fakeApp);
searcher.initialize();
});
it("first keypress should not search", function() {
// Workaround for key events not being reflected in val() calls
$('.searchtextinput').val('A');
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').focus();
$('.searchtextinput').trigger(e);
expect($.ajax.wasCalled).toBe(false);
});
it("second keypress should search", function() {
$('.searchtextinput').val('AA');
$('.searchtextinput').focus();
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').trigger(e);
// trigger again
$('.searchtextinput').trigger(e);
expect($.ajax).toHaveBeenCalled();
});
it("response div is absolute position", function() {
$('.searchtextinput').val('AA');
$('.searchtextinput').focus();
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
expect($('.searchresults').css('position')).toEqual('absolute');
});
it("response displayed in results", function() {
$('.searchtextinput').val('AA');
$('.searchtextinput').focus();
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
expect($('.searchresults').length).toEqual(1);
expect($('.searchresults h2').length).toEqual(1);
expect($('.searchresults li').length).toEqual(1);
expect($('.searchresults li img').length).toEqual(1);
expect($('.searchresults li span.text').length).toEqual(1);
expect($('.searchresults li span.subtext').length).toEqual(1);
});
it("response positioned under input", function() {
$('.searchtextinput').val('AA');
$('.searchtextinput').focus();
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
expect($('.searchresults').length).toEqual(1);
var bodyOffset = $('body').offset();
var inputOffset = $('.searchtextinput').offset();
var inputHeight = $('.searchtextinput').outerHeight();
var expectedTop = bodyOffset.top + inputOffset.top + inputHeight;
var expectedLeft = bodyOffset.left + inputOffset.left;
var searchResultOffset = $('.searchresults').offset();
expect(searchResultOffset.top).toEqual(expectedTop);
expect(searchResultOffset.left).toEqual(expectedLeft);
});
it("search results are visible", function() {
$('.searchtextinput').val('AA');
$('.searchtextinput').focus();
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
var visible = $('.searchresults').is(':visible');
expect(visible).toBe(true);
});
it("escape key hides search results", function() {
$('.searchtextinput').val('AA');
$('.searchtextinput').focus();
var e = jQuery.Event("keyup");
e.which = 65; // "a"
$('.searchtextinput').trigger(e);
$('.searchtextinput').trigger(e);
e = jQuery.Event("keyup");
e.which = 27; // ESCAPE
$('.searchtextinput').trigger(e);
var visible = $('.searchresults').is(':visible');
expect(visible).toBe(false);
});
});
});
})(window);