Files
zulip/web/tests/starred_messages.test.js
palashb01 af3e62b2ae popovers: Refactor topic_menu visible check and hide logic.
This commit refactors the topic_menu visible check and hide logic,
since we have already migrated the popover from stream_popover.js.
This last bit of code related to topic_menu is also migrated to
popover_menus.js, and the code is refactored to use the new logic,
which is more common for the popover_menus.js system.

To hide the popover, one possible solution could be to use the
hideAll method from TippyJS. However, this could lead to
unintentional behavior for all the popovers. To prevent this, the
hide method is used for the topic_menu only.
2023-04-05 16:47:39 -07:00

116 lines
3.5 KiB
JavaScript

"use strict";
const {strict: assert} = require("assert");
const {mock_esm, with_overrides, zrequire} = require("./lib/namespace");
const {make_stub} = require("./lib/stub");
const {run_test} = require("./lib/test");
const {page_params, user_settings} = require("./lib/zpage_params");
const top_left_corner = mock_esm("../src/top_left_corner", {
update_starred_count() {},
});
const message_store = zrequire("message_store");
const starred_messages = zrequire("starred_messages");
run_test("add starred", () => {
starred_messages.starred_ids.clear();
assert.deepEqual(starred_messages.get_starred_msg_ids(), []);
assert.equal(starred_messages.get_count(), 0);
starred_messages.add([1, 2]);
assert.deepEqual(starred_messages.get_starred_msg_ids(), [1, 2]);
assert.equal(starred_messages.get_count(), 2);
});
run_test("remove starred", () => {
starred_messages.starred_ids.clear();
assert.deepEqual(starred_messages.get_starred_msg_ids(), []);
for (const id of [1, 2, 3]) {
starred_messages.starred_ids.add(id);
}
assert.deepEqual(starred_messages.get_starred_msg_ids(), [1, 2, 3]);
starred_messages.remove([2, 3]);
assert.deepEqual(starred_messages.get_starred_msg_ids(), [1]);
assert.equal(starred_messages.get_count(), 1);
});
run_test("get starred ids in topic", () => {
for (const id of [1, 2, 3, 4, 5]) {
starred_messages.starred_ids.add(id);
}
assert.deepEqual(starred_messages.get_count_in_topic(undefined, "topic name"), 0);
assert.deepEqual(starred_messages.get_count_in_topic(3, undefined), 0);
// id: 1 isn't inserted, to test handling the case
// when message_store.get() returns undefined
message_store.update_message_cache({
id: 2,
type: "private",
});
message_store.update_message_cache({
// Different stream
id: 3,
type: "stream",
stream_id: 19,
topic: "topic",
});
message_store.update_message_cache({
// Different topic
id: 4,
type: "stream",
stream_id: 20,
topic: "some other topic",
});
message_store.update_message_cache({
// Correct match
id: 5,
type: "stream",
stream_id: 20,
topic: "topic",
});
assert.deepEqual(starred_messages.get_count_in_topic(20, "topic"), 1);
});
run_test("initialize", () => {
starred_messages.starred_ids.clear();
for (const id of [1, 2, 3]) {
starred_messages.starred_ids.add(id);
}
page_params.starred_messages = [4, 5, 6];
starred_messages.initialize();
assert.deepEqual(starred_messages.get_starred_msg_ids(), [4, 5, 6]);
});
run_test("rerender_ui", () => {
starred_messages.starred_ids.clear();
for (const id of [1, 2, 3]) {
starred_messages.starred_ids.add(id);
}
user_settings.starred_message_counts = true;
with_overrides(({override}) => {
const stub = make_stub();
override(top_left_corner, "update_starred_count", stub.f);
starred_messages.rerender_ui();
assert.equal(stub.num_calls, 1);
const args = stub.get_args("count");
assert.equal(args.count, 3);
});
user_settings.starred_message_counts = false;
with_overrides(({override}) => {
const stub = make_stub();
override(top_left_corner, "update_starred_count", stub.f);
starred_messages.rerender_ui();
assert.equal(stub.num_calls, 1);
const args = stub.get_args("count");
assert.equal(args.count, 0);
});
});