mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
tests: Add library function to create message lists.
This function actually instantiates the `MessageList` and `MessageListData` classes instead of just mocking its structure as it is currently done. It addresses https://github.com/zulip/zulip/pull/34645#discussion_r2099058418
This commit is contained in:
@@ -9,6 +9,7 @@ const {
|
||||
buddy_list_add_other_user,
|
||||
stub_buddy_list_elements,
|
||||
} = require("./lib/buddy_list.cjs");
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {mock_esm, set_global, with_overrides, zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test, noop} = require("./lib/test.cjs");
|
||||
const blueslip = require("./lib/zblueslip.cjs");
|
||||
@@ -50,7 +51,6 @@ const stream_data = zrequire("stream_data");
|
||||
const peer_data = zrequire("peer_data");
|
||||
const message_lists = zrequire("message_lists");
|
||||
const util = zrequire("util");
|
||||
const {Filter} = zrequire("../src/filter");
|
||||
const {set_current_user, set_realm} = zrequire("state_data");
|
||||
const {initialize_user_settings} = zrequire("user_settings");
|
||||
|
||||
@@ -114,12 +114,8 @@ const $fred_stub = $.create("fred stub");
|
||||
const rome_sub = {name: "Rome", subscribed: true, stream_id: 1001};
|
||||
function add_sub_and_set_as_current_narrow(sub) {
|
||||
stream_data.add_sub(sub);
|
||||
const filter = new Filter([{operator: "stream", operand: sub.stream_id}]);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
},
|
||||
});
|
||||
const filter_terms = [{operator: "stream", operand: sub.stream_id}];
|
||||
message_lists.set_current(make_message_list(filter_terms));
|
||||
}
|
||||
|
||||
function test(label, f) {
|
||||
|
||||
@@ -4,6 +4,7 @@ const assert = require("node:assert/strict");
|
||||
|
||||
const _ = require("lodash");
|
||||
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
|
||||
const {noop, run_test} = require("./lib/test.cjs");
|
||||
const {page_params} = require("./lib/zpage_params.cjs");
|
||||
@@ -27,7 +28,6 @@ const presence = zrequire("presence");
|
||||
const stream_data = zrequire("stream_data");
|
||||
const user_status = zrequire("user_status");
|
||||
const buddy_data = zrequire("buddy_data");
|
||||
const {Filter} = zrequire("filter");
|
||||
const message_lists = zrequire("message_lists");
|
||||
const {set_current_user, set_realm} = zrequire("state_data");
|
||||
const {initialize_user_settings} = zrequire("user_settings");
|
||||
@@ -370,11 +370,7 @@ test("always show me", () => {
|
||||
|
||||
test("always show pm users", () => {
|
||||
people.add_active_user(selma);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: new Filter([{operator: "dm", operand: selma.email}]),
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list([{operator: "dm", operand: selma.email}]));
|
||||
|
||||
assert.deepEqual(buddy_data.get_filtered_and_sorted_user_ids(""), [me.user_id, selma.user_id]);
|
||||
});
|
||||
@@ -414,18 +410,11 @@ test("show offline channel subscribers for small channels", ({override_rewire})
|
||||
me.user_id,
|
||||
]);
|
||||
|
||||
const filter = new Filter([
|
||||
const filter_terms = [
|
||||
{operator: "channel", operand: sub.stream_id},
|
||||
{operator: "topic", operand: "Foo"},
|
||||
]);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
participants: {
|
||||
visible: () => new Set(),
|
||||
},
|
||||
},
|
||||
});
|
||||
];
|
||||
message_lists.set_current(make_message_list(filter_terms));
|
||||
assert.deepEqual(buddy_data.get_filtered_and_sorted_user_ids(""), [
|
||||
me.user_id,
|
||||
alice.user_id,
|
||||
@@ -446,18 +435,15 @@ test("get_conversation_participants", () => {
|
||||
stream_data.add_sub(rome_sub);
|
||||
peer_data.set_subscribers(rome_sub.stream_id, [selma.user_id, me.user_id]);
|
||||
|
||||
const filter = new Filter([
|
||||
const filter_terms = [
|
||||
{operator: "channel", operand: rome_sub.stream_id},
|
||||
{operator: "topic", operand: "Foo"},
|
||||
]);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
participants: {
|
||||
visible: () => new Set([selma.user_id]),
|
||||
},
|
||||
},
|
||||
});
|
||||
];
|
||||
message_lists.set_current(
|
||||
make_message_list(filter_terms, {
|
||||
visible_participants: [selma.user_id],
|
||||
}),
|
||||
);
|
||||
|
||||
activity_ui.rerender_user_sidebar_participants();
|
||||
assert.deepEqual(
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_stream} = require("./lib/example_stream.cjs");
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test} = require("./lib/test.cjs");
|
||||
|
||||
@@ -84,14 +85,8 @@ run_test("narrow_state", () => {
|
||||
{operator: "topic", operand: "copenhagen"},
|
||||
];
|
||||
|
||||
const filter = new Filter(filter_terms);
|
||||
|
||||
// And here is where we actually change state.
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list(filter_terms));
|
||||
assert.equal(narrow_state.stream_name(), "Denmark");
|
||||
assert.equal(narrow_state.topic(), "copenhagen");
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_user} = require("./lib/example_user.cjs");
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test} = require("./lib/test.cjs");
|
||||
const $ = require("./lib/zjquery.cjs");
|
||||
@@ -26,7 +27,6 @@ mock_esm("../src/settings_data", {
|
||||
as that would help better understand the below test.
|
||||
*/
|
||||
|
||||
const {Filter} = zrequire("filter");
|
||||
const message_lists = zrequire("message_lists");
|
||||
const people = zrequire("people");
|
||||
const {set_current_user} = zrequire("state_data");
|
||||
@@ -86,11 +86,7 @@ run_test("typing_events.render_notifications_for_narrow", ({override, mock_templ
|
||||
const group = [anna.user_id, vronsky.user_id, levin.user_id, kitty.user_id];
|
||||
const conversation_key = typing_data.get_direct_message_conversation_key(group);
|
||||
const group_emails = `${anna.email},${vronsky.email},${levin.email},${kitty.email}`;
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: new Filter([{operator: "dm", operand: group_emails}]),
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list([{operator: "dm", operand: group_emails}]));
|
||||
|
||||
// Based on typing_events.MAX_USERS_TO_DISPLAY_NAME (which is currently 3),
|
||||
// we display either the list of all users typing (if they do not exceed
|
||||
|
||||
19
web/tests/lib/message_list.cjs
Normal file
19
web/tests/lib/message_list.cjs
Normal file
@@ -0,0 +1,19 @@
|
||||
"use strict";
|
||||
|
||||
const {zrequire} = require("./namespace.cjs");
|
||||
|
||||
const {Filter} = zrequire("filter");
|
||||
const {MessageList} = zrequire("message_list");
|
||||
const {MessageListData} = zrequire("message_list_data");
|
||||
|
||||
exports.make_message_list = (filter_terms, opts = {}) => {
|
||||
const filter = new Filter(filter_terms);
|
||||
const default_message_list = new MessageList({
|
||||
data: new MessageListData({
|
||||
filter,
|
||||
}),
|
||||
is_node_test: true,
|
||||
});
|
||||
default_message_list.data.participants.humans = new Set(opts.visible_participants ?? []);
|
||||
return default_message_list;
|
||||
};
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test, noop} = require("./lib/test.cjs");
|
||||
|
||||
@@ -11,7 +12,6 @@ mock_esm("../src/people.ts", {
|
||||
|
||||
const all_messages_data = zrequire("../src/all_messages_data");
|
||||
|
||||
const {Filter} = zrequire("../src/filter");
|
||||
const {MessageListData} = zrequire("../src/message_list_data");
|
||||
const narrow_state = zrequire("narrow_state");
|
||||
const message_view = zrequire("message_view");
|
||||
@@ -19,12 +19,9 @@ const message_lists = zrequire("message_lists");
|
||||
const resolved_topic = zrequire("../shared/src/resolved_topic");
|
||||
|
||||
function verify_fixture(fixture, override_rewire) {
|
||||
const filter = new Filter(fixture.filter_terms);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
},
|
||||
});
|
||||
const msg_list = make_message_list(fixture.filter_terms);
|
||||
const filter = msg_list.data.filter;
|
||||
message_lists.set_current(msg_list);
|
||||
|
||||
// Make sure our simulated tests data satisfies the
|
||||
// invariant that the first unread message we find
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test} = require("./lib/test.cjs");
|
||||
const {page_params} = require("./lib/zpage_params.cjs");
|
||||
@@ -18,14 +19,10 @@ function set_filter(raw_terms) {
|
||||
operator: op[0],
|
||||
operand: op[1],
|
||||
}));
|
||||
const filter = new Filter(terms);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter,
|
||||
},
|
||||
});
|
||||
const msg_list = make_message_list(terms);
|
||||
message_lists.set_current(msg_list);
|
||||
|
||||
return filter;
|
||||
return msg_list.data.filter;
|
||||
}
|
||||
|
||||
function test(label, f) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test} = require("./lib/test.cjs");
|
||||
const blueslip = require("./lib/zblueslip.cjs");
|
||||
@@ -24,7 +25,6 @@ mock_esm("../src/user_status", {
|
||||
}),
|
||||
});
|
||||
|
||||
const {Filter} = zrequire("filter");
|
||||
const narrow_state = zrequire("narrow_state");
|
||||
const people = zrequire("people");
|
||||
const pm_conversations = zrequire("pm_conversations");
|
||||
@@ -91,12 +91,7 @@ function test(label, f) {
|
||||
}
|
||||
|
||||
function set_pm_with_filter(emails) {
|
||||
const active_filter = new Filter([{operator: "dm", operand: emails}]);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: active_filter,
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list([{operator: "dm", operand: emails}]));
|
||||
}
|
||||
|
||||
function check_list_info(list, length, more_unread, recipients_array) {
|
||||
@@ -247,12 +242,7 @@ test("get_conversations bot", ({override}) => {
|
||||
test("get_active_user_ids_string", () => {
|
||||
assert.equal(pm_list_data.get_active_user_ids_string(), undefined);
|
||||
|
||||
const stream_filter = new Filter([{operator: "stream", operand: "test"}]);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: stream_filter,
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list([{operator: "stream", operand: "test"}]));
|
||||
assert.equal(pm_list_data.get_active_user_ids_string(), undefined);
|
||||
|
||||
set_pm_with_filter("bob@zulip.com,alice@zulip.com");
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test} = require("./lib/test.cjs");
|
||||
const $ = require("./lib/zjquery.cjs");
|
||||
|
||||
const settings_data = mock_esm("../src/settings_data");
|
||||
|
||||
const {Filter} = zrequire("filter");
|
||||
const message_lists = zrequire("message_lists");
|
||||
const people = zrequire("people");
|
||||
const {set_current_user, set_realm} = zrequire("state_data");
|
||||
@@ -54,11 +54,7 @@ run_test("render_notifications_for_narrow", ({override, mock_template}) => {
|
||||
const group = [anna.user_id, vronsky.user_id, levin.user_id, kitty.user_id];
|
||||
const conversation_key = typing_data.get_direct_message_conversation_key(group);
|
||||
const group_emails = `${anna.email},${vronsky.email},${levin.email},${kitty.email}`;
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: new Filter([{operator: "dm", operand: group_emails}]),
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list([{operator: "dm", operand: group_emails}]));
|
||||
|
||||
const $typing_notifications = $("#typing_notifications");
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {make_message_list} = require("./lib/message_list.cjs");
|
||||
const {set_global, mock_esm, zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test, noop} = require("./lib/test.cjs");
|
||||
const $ = require("./lib/zjquery.cjs");
|
||||
@@ -37,7 +38,6 @@ const sidebar_ui = mock_esm("../src/sidebar_ui");
|
||||
|
||||
const activity_ui = zrequire("activity_ui");
|
||||
const buddy_data = zrequire("buddy_data");
|
||||
const {Filter} = zrequire("../src/filter");
|
||||
const message_lists = zrequire("message_lists");
|
||||
const muted_users = zrequire("muted_users");
|
||||
const people = zrequire("people");
|
||||
@@ -148,11 +148,7 @@ test("fetch on search", async ({override}) => {
|
||||
|
||||
const office = {stream_id: 23, name: "office", subscribed: true};
|
||||
stream_data.add_sub(office);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: new Filter([{operator: "stream", operand: office.stream_id}]),
|
||||
},
|
||||
});
|
||||
message_lists.set_current(make_message_list([{operator: "stream", operand: office.stream_id}]));
|
||||
let get_call_count = 0;
|
||||
channel.get = () => {
|
||||
get_call_count += 1;
|
||||
@@ -176,17 +172,13 @@ test("fetch on search", async ({override}) => {
|
||||
stream_data.add_sub(kitchen);
|
||||
const living_room = {stream_id: 26, name: "living_room", subscribed: true};
|
||||
stream_data.add_sub(living_room);
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: new Filter([{operator: "stream", operand: kitchen.stream_id}]),
|
||||
},
|
||||
});
|
||||
message_lists.set_current(
|
||||
make_message_list([{operator: "stream", operand: kitchen.stream_id}]),
|
||||
);
|
||||
set_input_val("somevalue");
|
||||
message_lists.set_current({
|
||||
data: {
|
||||
filter: new Filter([{operator: "stream", operand: living_room.stream_id}]),
|
||||
},
|
||||
});
|
||||
message_lists.set_current(
|
||||
make_message_list([{operator: "stream", operand: living_room.stream_id}]),
|
||||
);
|
||||
set_input_val("somevalue");
|
||||
await activity_ui.await_pending_promise_for_testing();
|
||||
assert.equal(get_call_count, 2);
|
||||
|
||||
Reference in New Issue
Block a user