diff --git a/frontend_tests/node_tests/message_events.js b/frontend_tests/node_tests/message_events.js new file mode 100644 index 0000000000..078c300eec --- /dev/null +++ b/frontend_tests/node_tests/message_events.js @@ -0,0 +1,115 @@ +zrequire('message_events'); +zrequire('message_store'); +zrequire('people'); + +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(alice); + +function test_helper(side_effects) { + const events = []; + + _.each(side_effects, (side_effect) => { + 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, + sender_id: alice.user_id, + }; + + message_store.add_message_metadata(original_message); + + const events = [ + { + message_id: 111, + 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 = {}; + + var 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', + '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); + + helper.verify(); + + assert.deepEqual(rendered_mgs, [ + { + alerted: false, + content: 'new content', + id: 111, + last_edit_timestamp: undefined, + mentioned: false, + mentioned_me_directly: false, + raw_content: '**new content**', + reactions: [], + sender_email: 'alice@example.com', + sender_full_name: 'Alice Patel', + sender_id: 32, + sent_by_me: false, + }, + ]); + +});