"use strict"; const {strict: assert} = require("assert"); const {set_global, zrequire} = require("../zjsunit/namespace"); const {run_test} = require("../zjsunit/test"); const {make_zjquery} = require("../zjsunit/zjquery"); zrequire("message_events"); zrequire("message_store"); zrequire("muting"); const people = zrequire("people"); zrequire("recent_senders"); zrequire("stream_data"); zrequire("stream_topic_history"); zrequire("unread"); set_global("$", make_zjquery()); set_global("alert_words", {}); set_global("condense", {}); set_global("current_msg_list", {}); set_global("message_edit", {}); set_global("message_list", {}); set_global("notifications", {}); set_global("page_params", {}); set_global("pm_list", {}); set_global("stream_list", {}); set_global("unread_ui", {}); alert_words.process_message = () => {}; 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 side_effect of side_effects) { const parts = side_effect.split("."); const module = parts[0]; const field = parts[1]; global[module][field] = () => { events.push(side_effect); }; } const self = {}; self.verify = () => { assert.deepEqual(side_effects, events); }; return self; } run_test("update_messages", () => { const original_message = { id: 111, display_recipient: denmark.name, flags: ["mentioned"], sender_id: alice.user_id, stream_id: denmark.stream_id, topic: "lunch", type: "stream", }; message_store.add_message_metadata(original_message); message_store.set_message_booleans(original_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(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", }, ]; current_msg_list.get_row = (message_id) => { assert.equal(message_id, 111); return ["row-stub"]; }; current_msg_list.view = {}; let rendered_mgs; current_msg_list.view.rerender_messages = (msgs_to_rerender, message_content_edited) => { rendered_mgs = msgs_to_rerender; assert.equal(message_content_edited, true); }; const side_effects = [ "condense.un_cache_message_content_height", "message_edit.end_message_row_edit", "notifications.received_messages", "unread_ui.update_unread_counts", "stream_list.update_streams_sidebar", "pm_list.update_private_messages", ]; const helper = test_helper(side_effects); page_params.realm_allow_edit_history = false; message_list.narrowed = "stub-to-ignore"; // TEST THIS: message_events.update_messages(events); assert(!unread.unread_mentions_counter.has(original_message.id)); helper.verify(); assert.deepEqual(rendered_mgs, [ { alerted: false, collapsed: false, content: "new content", display_recipient: denmark.name, historical: false, id: 111, is_stream: true, last_edit_timestamp: undefined, mentioned: false, mentioned_me_directly: false, raw_content: "**new content**", reactions: [], reply_to: alice.email, sender_email: alice.email, sender_full_name: alice.full_name, sender_id: 32, sent_by_me: false, starred: false, stream: denmark.name, stream_id: denmark.stream_id, topic: "lunch", type: "stream", unread: true, }, ]); });