mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 16:37:23 +00:00
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.
243 lines
7.7 KiB
JavaScript
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);
|
|
});
|