197 lines
7.0 KiB
JavaScript
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); |