Created test_search.js. (unit tests for search.js)

(imported from commit 8127c04ccc68a9ac106e5684a7ea9a621cb1831f)
This commit is contained in:
Steve Howell
2013-07-28 17:05:01 -04:00
parent 6cf5b64b3c
commit 998a22eabb
2 changed files with 171 additions and 0 deletions

View File

@@ -3,3 +3,4 @@
cd "$(dirname "$0")"/../zephyr/tests/frontend/node
node test_message_tour.js
node test_unread.js
node test_search.js

View File

@@ -0,0 +1,170 @@
// Unit test the search.js module.
//
// These tests are framework-free and run sequentially; they are invoked
// immediately after being defined. The contract here is that tests should
// clean up after themselves, and they should explicitly stub all
// dependencies.
var assert = require('assert');
function set_up_dependencies() {
var _ = global._ = require('../../../../static/third/underscore/underscore.js');
global.Handlebars = require('handlebars');
// We stub out most of jQuery, which is irrelevant to most of these tests.
var $ = function () {};
global.$ = $;
$.each = function (it, cb) {
var cb2 = function (a, b) { return cb(b,a); };
return _.each(it, cb2);
};
$.map = _.map;
$.grep = _.filter;
var actual_narrow = require('../../../../static/js/narrow.js');
var search = require('../../../../static/js/search.js');
global.narrow = {
parse: actual_narrow.parse,
unparse: actual_narrow.unparse,
canonicalize_operator: actual_narrow.canonicalize_operator,
Filter: actual_narrow.Filter
};
global.page_params = {
email: 'bob@zulip.com'
};
global.subs = {
canonicalized_name: function (name) { return name; }
};
global.typeahead_helper = require('../../../../static/js/typeahead_helper.js');
global.recent_subjects = {};
return search;
}
var search = set_up_dependencies();
(function test_basic_get_suggestions() {
var query = 'fred';
global.subs.subscribed_streams = function () {
return [];
};
global.narrow.stream = function () {
return 'office';
};
var suggestions = search.get_suggestions(query);
var expected = [
'fred',
''
];
assert.deepEqual(suggestions, expected);
}());
(function test_empty_query_suggestions() {
var query = '';
global.subs.subscribed_streams = function () {
return ['devel', 'office'];
};
global.narrow.stream = function () {
return undefined;
};
var suggestions = search.get_suggestions(query);
var expected = [
"",
"in:all",
"is:private",
"is:starred",
"is:mentioned",
"sender:bob@zulip.com",
"stream:devel",
"stream:office"
];
assert.deepEqual(suggestions, expected);
}());
(function test_topic_suggestions() {
var query = 'te';
global.subs.subscribed_streams = function () {
return ['office'];
};
global.narrow.stream = function () {
return 'office';
};
global.recent_subjects = {
office: [
{subject: 'team'},
{subject: 'ignore'},
{subject: 'test'}
]
};
var suggestions = search.get_suggestions(query);
var expected = [
"te",
"stream:office topic:team",
"stream:office topic:test",
""
];
assert.deepEqual(suggestions, expected);
}());
(function test_people_suggestions() {
var query = 'te';
global.subs.subscribed_streams = function () {
return [];
};
global.narrow.stream = function () {
return;
};
global.page_params.people_list = [
{
email: 'ted@zulip.com',
full_name: 'Ted Smith'
},
{
email: 'alice@zulip.com',
full_name: 'Alice Ignore'
}
];
global.recent_subjects = {
office: [
{subject: 'team'},
{subject: 'ignore'},
{subject: 'test'}
]
};
var suggestions = search.get_suggestions(query);
var expected = [
"te",
"pm-with:ted@zulip.com",
"sender:ted@zulip.com",
""
];
assert.deepEqual(suggestions, expected);
}());