Files
zulip/frontend_tests/node_tests/message_events.js
sahil839 2af4ef6c6d message_events: Fix live update of message edit history.
This commit adds code to live update the message edit history.
Message edit history is fetched and rendered again if the edit
history modal is open.

This also adds 'data-message-id' attribute to 'message-history'
when opening history modal element which is used for checking
whether the history modal opened is of the message which is
edited.

Fixes #15051.
2020-05-25 15:51:01 -07:00

159 lines
4.0 KiB
JavaScript

zrequire('message_events');
zrequire('message_store');
zrequire('muting');
zrequire('people');
zrequire('recent_senders');
zrequire('stream_data');
zrequire('stream_topic_history');
zrequire('unread');
set_global('$', 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(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: '<b>new content</b>',
},
];
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: '<b>new content</b>',
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,
},
]);
});