mirror of
https://github.com/zulip/zulip.git
synced 2026-06-24 21:08:25 +08:00
We had a bug where if your peer mentioned you in message, but then edited the message not to mention you, the latter wouldn't reset your unread counts for "Mentions". And the same problem would happen vice versa. The fix basically extracts `update_message_for_mention` and makes sure it handles all combinations of unread/mentioned flags, instead of assuming any invariants about which directions of change are possible. And then we call that new function from `message_events.js` whenever we get message edit events. Fixes #14544
158 lines
3.9 KiB
JavaScript
158 lines
3.9 KiB
JavaScript
zrequire('message_events');
|
|
zrequire('message_store');
|
|
zrequire('muting');
|
|
zrequire('people');
|
|
zrequire('recent_senders');
|
|
zrequire('stream_data');
|
|
zrequire('topic_data');
|
|
zrequire('unread');
|
|
|
|
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: '[email protected]',
|
|
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(
|
|
topic_data.get_recent_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',
|
|
'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,
|
|
},
|
|
]);
|
|
|
|
});
|