mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 03:11:54 +00:00
User search for streams will now return results where the stream description (but not the stream name) include the string in the user query. The filtering process first obtains the streams whose names match the user search query, then sorts and displays them. From the remaining streams, it obtains streams whose description matches the query and displays them in sorted order after the name match results. Other streams are not displayed. Fixes: #2674.
163 lines
5.4 KiB
JavaScript
163 lines
5.4 KiB
JavaScript
global.stub_out_jquery();
|
|
|
|
add_dependencies({
|
|
stream_data: 'js/stream_data',
|
|
Handlebars: 'handlebars',
|
|
templates: 'js/templates',
|
|
i18n: 'i18next',
|
|
});
|
|
|
|
var subs = require('js/subs.js');
|
|
|
|
var jsdom = require("jsdom");
|
|
var window = jsdom.jsdom().defaultView;
|
|
global.$ = require('jquery')(window);
|
|
|
|
var i18n = global.i18n;
|
|
i18n.init({
|
|
nsSeparator: false,
|
|
keySeparator: false,
|
|
interpolation: {
|
|
prefix: "__",
|
|
suffix: "__",
|
|
},
|
|
lng: 'en',
|
|
});
|
|
|
|
subs.stream_name_match_stream_ids = [];
|
|
subs.stream_description_match_stream_ids = [];
|
|
|
|
(function test_filter_table() {
|
|
var denmark = {
|
|
subscribed: false,
|
|
name: 'Denmark',
|
|
stream_id: 1,
|
|
description: 'Copenhagen',
|
|
};
|
|
var poland = {
|
|
subscribed: true,
|
|
name: 'Poland',
|
|
stream_id: 2,
|
|
description: 'monday',
|
|
};
|
|
var pomona = {
|
|
subscribed: true,
|
|
name: 'Pomona',
|
|
stream_id: 3,
|
|
description: 'college',
|
|
};
|
|
var cpp = {
|
|
subscribed: true,
|
|
name: 'C++',
|
|
stream_id: 4,
|
|
};
|
|
|
|
var elem_1 = $(global.render_template("subscription", denmark));
|
|
var elem_2 = $(global.render_template("subscription", poland));
|
|
var elem_3 = $(global.render_template("subscription", pomona));
|
|
var elem_4 = $(global.render_template("subscription", cpp));
|
|
|
|
$("body").empty();
|
|
$("body").append('<div id="subscriptions_table"></div>');
|
|
var streams_list = $('<div class="streams-list"></div>');
|
|
$("#subscriptions_table").append(streams_list);
|
|
|
|
stream_data.add_sub("Denmark", denmark);
|
|
stream_data.add_sub("Poland", poland);
|
|
stream_data.add_sub("Pomona", pomona);
|
|
stream_data.add_sub("C++", cpp);
|
|
|
|
streams_list.append(elem_1);
|
|
streams_list.append(elem_2);
|
|
streams_list.append(elem_3);
|
|
|
|
// Search with single keyword
|
|
subs.filter_table({input: "Po", subscribed_only: false});
|
|
assert(elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(!elem_3.hasClass("notdisplayed"));
|
|
|
|
// Search with multiple keywords
|
|
subs.filter_table({input: "Denmark, Pol", subscribed_only: false});
|
|
assert(!elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(elem_3.hasClass("notdisplayed"));
|
|
|
|
subs.filter_table({input: "Den, Pol", subscribed_only: false});
|
|
assert(!elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(elem_3.hasClass("notdisplayed"));
|
|
|
|
// Search is case-insensitive
|
|
subs.filter_table({input: "po", subscribed_only: false});
|
|
assert(elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(!elem_3.hasClass("notdisplayed"));
|
|
|
|
// Search handles unusual characters like C++
|
|
subs.filter_table({input: "c++", subscribed_only: false});
|
|
assert(elem_1.hasClass("notdisplayed"));
|
|
assert(elem_2.hasClass("notdisplayed"));
|
|
assert(elem_3.hasClass("notdisplayed"));
|
|
assert(!elem_4.hasClass("notdisplayed"));
|
|
|
|
// Search subscribed streams only
|
|
subs.filter_table({input: "d", subscribed_only: true});
|
|
assert(elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(elem_3.hasClass("notdisplayed"));
|
|
|
|
// data-temp-view condition
|
|
elem_1.attr("data-temp-view", "true");
|
|
|
|
subs.filter_table({input: "d", subscribed_only: true});
|
|
assert(!elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(elem_3.hasClass("notdisplayed"));
|
|
|
|
elem_1.attr("data-temp-view", "false");
|
|
|
|
subs.filter_table({input: "d", subscribed_only: true});
|
|
assert(elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(elem_3.hasClass("notdisplayed"));
|
|
|
|
elem_1.removeAttr("data-temp-view");
|
|
|
|
// active stream-row is not included in results
|
|
elem_1.addClass("active");
|
|
$("#subscriptions_table").append($('<div class="right"></div>'));
|
|
$(".right").append($('<div class="settings"></div>'));
|
|
$(".right").append($('<div class="nothing-selected"></div>').hide());
|
|
|
|
subs.filter_table({input: "d", subscribed_only: true});
|
|
assert(!elem_1.hasClass("active"));
|
|
assert.equal($(".right .settings").css("display"), "none");
|
|
assert.notEqual($(".right .nothing-selected").css("display"), "none");
|
|
|
|
// Search terms match stream description
|
|
subs.filter_table({input: "Co", subscribed_only: false});
|
|
assert(!elem_1.hasClass("notdisplayed"));
|
|
assert(elem_2.hasClass("notdisplayed"));
|
|
assert(!elem_3.hasClass("notdisplayed"));
|
|
|
|
subs.filter_table({input: "Mon", subscribed_only: false});
|
|
assert(elem_1.hasClass("notdisplayed"));
|
|
assert(!elem_2.hasClass("notdisplayed"));
|
|
assert(!elem_3.hasClass("notdisplayed"));
|
|
|
|
subs.filter_table({input: "p", subscribed_only: false});
|
|
assert.equal(subs.stream_name_match_stream_ids.length, 2);
|
|
assert.equal(subs.stream_description_match_stream_ids, 1);
|
|
assert.equal(subs.stream_name_match_stream_ids[0], 2);
|
|
assert.equal(subs.stream_name_match_stream_ids[1], 3);
|
|
assert.equal(subs.stream_description_match_stream_ids[0], 1);
|
|
|
|
subs.filter_table({input: "d", subscribed_only: false});
|
|
assert.equal(subs.stream_name_match_stream_ids.length, 2);
|
|
assert.equal(subs.stream_description_match_stream_ids, 0);
|
|
assert.equal(subs.stream_name_match_stream_ids[0], 1);
|
|
assert.equal(subs.stream_name_match_stream_ids[1], 2);
|
|
}());
|
|
|