Files
zulip/frontend_tests/node_tests/user_search.js
Steve Howell cd1510c0ef node tests: Extract user_search tests.
This is mostly moving tests from activity.js
into user_search.js, but it's not a verbatim
code move.

The new module continues to make sure that
the boundary between activity and user_search
is correct, as most of the testing uses
the configuration of UserSearch from
static/js/activity.js.

It does not use a real buddy_list, though,
which simplifies some tests.

I cleaned up some tests by making sure we
were testing both sides of conditions more
rigorously.

After this change we no longer need the
bloated activity.js tests to maintain full
coverage on static/js/user_search.js.
2021-05-18 14:16:55 -04:00

243 lines
7.7 KiB
JavaScript

"use strict";
const {strict: assert} = require("assert");
const {mock_cjs, mock_esm, set_global, zrequire} = require("../zjsunit/namespace");
const {run_test} = require("../zjsunit/test");
const $ = require("../zjsunit/zjquery");
const {page_params} = require("../zjsunit/zpage_params");
mock_cjs("jquery", $);
const _document = {
hasFocus() {
return true;
},
};
const fake_buddy_list = {
scroll_container_sel: "#whatever",
find_li: () => {},
first_key: () => {},
prev_key: () => {},
next_key: () => {},
};
mock_esm("../../static/js/buddy_list", {
buddy_list: fake_buddy_list,
});
const popovers = mock_esm("../../static/js/popovers");
const presence = mock_esm("../../static/js/presence");
const stream_popover = mock_esm("../../static/js/stream_popover");
const resize = mock_esm("../../static/js/resize");
set_global("document", _document);
const activity = zrequire("activity");
const buddy_data = zrequire("buddy_data");
const muting = zrequire("muting");
const people = zrequire("people");
const me = {
email: "me@zulip.com",
user_id: 999,
full_name: "Me Myself",
};
const alice = {
email: "alice@zulip.com",
user_id: 1,
full_name: "Alice Smith",
};
const fred = {
email: "fred@zulip.com",
user_id: 2,
full_name: "Fred Flintstone",
};
const jill = {
email: "jill@zulip.com",
user_id: 3,
full_name: "Jill Hill",
};
const all_user_ids = [alice.user_id, fred.user_id, jill.user_id, me.user_id];
const ordered_user_ids = [me.user_id, alice.user_id, fred.user_id, jill.user_id];
function test(label, f) {
run_test(label, (override) => {
people.init();
people.add_active_user(alice);
people.add_active_user(fred);
people.add_active_user(jill);
people.add_active_user(me);
people.initialize_current_user(me.user_id);
muting.set_muted_users([]);
activity.set_cursor_and_filter();
f(override);
});
}
test("clear_search", (override) => {
override(fake_buddy_list, "populate", (user_ids) => {
assert.deepEqual(user_ids, {keys: ordered_user_ids});
});
override(presence, "get_status", () => "active");
override(presence, "get_user_ids", () => all_user_ids);
override(resize, "resize_sidebars", () => {});
$(".user-list-filter").val("somevalue");
assert(!$("#user_search_section").hasClass("notdisplayed"));
$("#clear_search_people_button").trigger("click");
assert.equal($(".user-list-filter").val(), "");
$("#clear_search_people_button").trigger("click");
assert($("#user_search_section").hasClass("notdisplayed"));
});
test("escape_search", (override) => {
page_params.realm_presence_disabled = true;
override(resize, "resize_sidebars", () => {});
override(popovers, "hide_all_except_sidebars", () => {});
$(".user-list-filter").val("somevalue");
activity.escape_search();
assert.equal($(".user-list-filter").val(), "");
activity.escape_search();
assert($("#user_search_section").hasClass("notdisplayed"));
});
test("blur search right", (override) => {
override(popovers, "show_userlist_sidebar", () => {});
override(popovers, "hide_all", () => {});
override(popovers, "hide_all_except_sidebars", () => {});
override(resize, "resize_sidebars", () => {});
$(".user-list-filter").closest = (selector) => {
assert.equal(selector, ".app-main [class^='column-']");
return $.create("right-sidebar").addClass("column-right");
};
$(".user-list-filter").trigger("blur");
assert.equal($(".user-list-filter").is_focused(), false);
activity.initiate_search();
assert.equal($(".user-list-filter").is_focused(), true);
});
test("blur search left", (override) => {
override(stream_popover, "show_streamlist_sidebar", () => {});
override(popovers, "hide_all", () => {});
override(popovers, "hide_all_except_sidebars", () => {});
override(resize, "resize_sidebars", () => {});
$(".user-list-filter").closest = (selector) => {
assert.equal(selector, ".app-main [class^='column-']");
return $.create("right-sidebar").addClass("column-left");
};
$(".user-list-filter").trigger("blur");
assert.equal($(".user-list-filter").is_focused(), false);
activity.initiate_search();
assert.equal($(".user-list-filter").is_focused(), true);
});
test("filter_user_ids", (override) => {
const user_presence = {};
user_presence[alice.user_id] = "active";
user_presence[fred.user_id] = "active";
user_presence[jill.user_id] = "active";
user_presence[me.user_id] = "active";
override(presence, "get_status", (user_id) => user_presence[user_id]);
override(presence, "get_user_ids", () => all_user_ids);
const user_filter = $(".user-list-filter");
user_filter.val(""); // no search filter
function get_user_ids() {
const filter_text = activity.get_filter_text();
const user_ids = buddy_data.get_filtered_and_sorted_user_ids(filter_text);
return user_ids;
}
let user_ids = buddy_data.get_filtered_and_sorted_user_ids();
assert.deepEqual(user_ids, [me.user_id, alice.user_id, fred.user_id, jill.user_id]);
muting.add_muted_user(jill.user_id);
// Test no match for muted user when there is no filter.
user_ids = get_user_ids();
assert.deepEqual(user_ids, [me.user_id, alice.user_id, fred.user_id]);
// Test no match for muted users even with filter text.
user_filter.val("ji");
user_ids = get_user_ids();
assert.deepEqual(user_ids, []);
muting.remove_muted_user(jill.user_id);
user_filter.val("abc"); // no match
user_ids = get_user_ids();
assert.deepEqual(user_ids, []);
user_filter.val("fred"); // match fred
user_ids = get_user_ids();
assert.deepEqual(user_ids, [fred.user_id]);
user_filter.val("fred,alice"); // match fred and alice
user_ids = get_user_ids();
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
user_filter.val("fr,al"); // match fred and alice partials
user_ids = get_user_ids();
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
user_filter.val("fr|al"); // test | as OR-operator
user_ids = get_user_ids();
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
user_presence[alice.user_id] = "idle";
user_filter.val("fr,al"); // match fred and alice partials and idle user
user_ids = get_user_ids();
assert.deepEqual(user_ids, [fred.user_id, alice.user_id]);
user_presence[alice.user_id] = "active";
user_ids = get_user_ids();
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
});
test("click on user header to toggle display", (override) => {
const user_filter = $(".user-list-filter");
override(popovers, "hide_all", () => {});
override(popovers, "hide_all_except_sidebars", () => {});
override(popovers, "show_userlist_sidebar", () => {});
override(resize, "resize_sidebars", () => {});
page_params.realm_presence_disabled = true;
assert(!$("#user_search_section").hasClass("notdisplayed"));
user_filter.val("bla");
$("#userlist-header").trigger("click");
assert($("#user_search_section").hasClass("notdisplayed"));
assert.equal(user_filter.val(), "");
$(".user-list-filter").closest = (selector) => {
assert.equal(selector, ".app-main [class^='column-']");
return $.create("sidebar").addClass("column-right");
};
$("#userlist-header").trigger("click");
assert.equal($("#user_search_section").hasClass("notdisplayed"), false);
});
test("searching", () => {
assert.equal(activity.searching(), false);
$(".user-list-filter").trigger("focus");
assert.equal(activity.searching(), true);
$(".user-list-filter").trigger("blur");
assert.equal(activity.searching(), false);
});