"use strict";
const assert = require("node:assert/strict");
const {mock_esm, zrequire} = require("./lib/namespace");
const {run_test, noop} = require("./lib/test");
const $ = require("./lib/zjquery");
const message_edit = mock_esm("../src/message_edit");
const message_lists = mock_esm("../src/message_lists");
const message_notifications = mock_esm("../src/message_notifications");
const pm_list = mock_esm("../src/pm_list");
const stream_list = mock_esm("../src/stream_list");
const unread_ui = mock_esm("../src/unread_ui");
mock_esm("../src/message_parser", {
message_has_attachment: noop,
message_has_image: noop,
message_has_link: noop,
});
message_lists.current = {};
message_lists.all_rendered_message_lists = () => [message_lists.current];
const people = zrequire("people");
const message_events = zrequire("message_events");
message_events.__Rewire__("update_views_filtered_on_message_property", () => {});
const message_helper = zrequire("message_helper");
const {set_realm} = zrequire("state_data");
const stream_data = zrequire("stream_data");
const stream_topic_history = zrequire("stream_topic_history");
const unread = zrequire("unread");
const {initialize_user_settings} = zrequire("user_settings");
const realm = {};
set_realm(realm);
initialize_user_settings({user_settings: {}});
const alice = {
email: "alice@example.com",
user_id: 32,
full_name: "Alice Patel",
};
people.add_active_user(alice);
const denmark = {
subscribed: false,
name: "Denmark",
stream_id: 101,
};
stream_data.add_sub(denmark);
function test_helper(side_effects) {
const events = [];
for (const [module, field] of side_effects) {
module[field] = () => {
events.push([module, field]);
};
}
const self = {};
self.verify = () => {
assert.deepEqual(side_effects, events);
};
return self;
}
run_test("update_messages", ({override}) => {
const raw_message = {
id: 111,
display_recipient: denmark.name,
flags: ["mentioned"],
sender_id: alice.user_id,
stream_id: denmark.stream_id,
topic: "lunch",
type: "stream",
};
const original_message = message_helper.process_new_message(raw_message);
assert.equal(original_message.mentioned, true);
assert.equal(original_message.unread, true);
assert.deepEqual(stream_topic_history.get_recent_topic_names(denmark.stream_id), ["lunch"]);
unread.update_message_for_mention(original_message);
assert.ok(unread.unread_mentions_counter.has(original_message.id));
const events = [
{
message_id: original_message.id,
flags: [],
orig_content: "old stuff",
content: "**new content**",
rendered_content: "new content",
},
];
message_lists.current.view = {};
let rendered_mgs;
message_lists.current.view.rerender_messages = (msgs_to_rerender, message_content_edited) => {
rendered_mgs = msgs_to_rerender;
assert.equal(message_content_edited, true);
};
const side_effects = [
[message_edit, "end_message_edit"],
[message_notifications, "received_messages"],
[unread_ui, "update_unread_counts"],
[stream_list, "update_streams_sidebar"],
[pm_list, "update_private_messages"],
];
const helper = test_helper(side_effects);
override(realm, "realm_allow_edit_history", false);
const $message_edit_history_modal = $.create("#message-edit-history");
const $modal = $.create("micromodal").addClass("modal--open");
$message_edit_history_modal.set_parents_result(".micromodal", $modal);
// TEST THIS:
message_events.update_messages(events);
assert.ok(!unread.unread_mentions_counter.has(original_message.id));
helper.verify();
assert.deepEqual(rendered_mgs, [
{
display_reply_to: undefined,
alerted: false,
clean_reactions: new Map(),
collapsed: false,
content: "new content",
display_recipient: denmark.name,
historical: false,
id: 111,
is_stream: true,
is_private: false,
last_edit_timestamp: undefined,
mentioned: false,
stream_wildcard_mentioned: false,
topic_wildcard_mentioned: false,
mentioned_me_directly: false,
raw_content: "**new content**",
reply_to: alice.email,
sender_email: alice.email,
sender_full_name: alice.full_name,
sender_id: 32,
sent_by_me: false,
starred: false,
status_emoji_info: undefined,
stream_id: denmark.stream_id,
stream: "Denmark",
topic: "lunch",
type: "stream",
unread: true,
},
]);
});