mirror of https://github.com/zulip/zulip.git
message_edit: Update do_update_message codepath to send event on commit.
Earlier, we were using 'send_event' in 'do_update_message' which can lead to a situation where we enqueue events but the transaction fails at a later stage. Events should not be sent until we know we're not rolling back.
This commit is contained in:
parent
bca8338ee1
commit
0ce79c8c50
|
@ -81,7 +81,7 @@ from zerver.models import (
|
|||
)
|
||||
from zerver.models.streams import get_stream_by_id_in_realm
|
||||
from zerver.models.users import get_system_bot
|
||||
from zerver.tornado.django_api import send_event, send_event_on_commit
|
||||
from zerver.tornado.django_api import send_event_on_commit
|
||||
|
||||
|
||||
def subscriber_info(user_id: int) -> Dict[str, Any]:
|
||||
|
@ -730,7 +730,9 @@ def do_update_message(
|
|||
"stream_id": stream_being_edited.id,
|
||||
"topic": orig_topic_name,
|
||||
}
|
||||
send_event(user_profile.realm, delete_event, [user.id for user in users_losing_access])
|
||||
send_event_on_commit(
|
||||
user_profile.realm, delete_event, [user.id for user in users_losing_access]
|
||||
)
|
||||
|
||||
# Reset the Attachment.is_*_public caches for all messages
|
||||
# moved to another stream with different access permissions.
|
||||
|
@ -1003,7 +1005,7 @@ def do_update_message(
|
|||
visibility_policy=new_visibility_policy,
|
||||
)
|
||||
|
||||
send_event(user_profile.realm, event, users_to_be_notified)
|
||||
send_event_on_commit(user_profile.realm, event, users_to_be_notified)
|
||||
|
||||
resolved_topic_message_id = None
|
||||
if topic_name is not None and content is None:
|
||||
|
|
|
@ -1127,7 +1127,7 @@ class EditMessageTest(ZulipTestCase):
|
|||
do_edit_message_assert_success(id_, "G", "cordelia")
|
||||
do_edit_message_assert_success(id_, "H", "hamlet")
|
||||
|
||||
@mock.patch("zerver.actions.message_edit.send_event")
|
||||
@mock.patch("zerver.actions.message_edit.send_event_on_commit")
|
||||
def test_topic_wildcard_mention_in_followed_topic(
|
||||
self, mock_send_event: mock.MagicMock
|
||||
) -> None:
|
||||
|
@ -1185,7 +1185,7 @@ class EditMessageTest(ZulipTestCase):
|
|||
called = True
|
||||
self.assertTrue(called)
|
||||
|
||||
@mock.patch("zerver.actions.message_edit.send_event")
|
||||
@mock.patch("zerver.actions.message_edit.send_event_on_commit")
|
||||
def test_stream_wildcard_mention_in_followed_topic(
|
||||
self, mock_send_event: mock.MagicMock
|
||||
) -> None:
|
||||
|
@ -1243,7 +1243,7 @@ class EditMessageTest(ZulipTestCase):
|
|||
called = True
|
||||
self.assertTrue(called)
|
||||
|
||||
@mock.patch("zerver.actions.message_edit.send_event")
|
||||
@mock.patch("zerver.actions.message_edit.send_event_on_commit")
|
||||
def test_topic_wildcard_mention(self, mock_send_event: mock.MagicMock) -> None:
|
||||
stream_name = "Macbeth"
|
||||
hamlet = self.example_user("hamlet")
|
||||
|
@ -1349,7 +1349,7 @@ class EditMessageTest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_success(result)
|
||||
|
||||
@mock.patch("zerver.actions.message_edit.send_event")
|
||||
@mock.patch("zerver.actions.message_edit.send_event_on_commit")
|
||||
def test_stream_wildcard_mention(self, mock_send_event: mock.MagicMock) -> None:
|
||||
stream_name = "Macbeth"
|
||||
hamlet = self.example_user("hamlet")
|
||||
|
|
|
@ -100,7 +100,8 @@ class EditMessageSideEffectsTest(ZulipTestCase):
|
|||
)
|
||||
|
||||
with mock.patch("zerver.tornado.event_queue.maybe_enqueue_notifications") as m:
|
||||
result = self.client_patch(url, request)
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
result = self.client_patch(url, request)
|
||||
|
||||
cordelia = self.example_user("cordelia")
|
||||
cordelia_calls = [
|
||||
|
|
|
@ -111,7 +111,7 @@ class MessageMoveTopicTest(ZulipTestCase):
|
|||
)
|
||||
self.assert_json_error(result, "Invalid character in topic, at position 8!")
|
||||
|
||||
@mock.patch("zerver.actions.message_edit.send_event")
|
||||
@mock.patch("zerver.actions.message_edit.send_event_on_commit")
|
||||
def test_edit_topic_public_history_stream(self, mock_send_event: mock.MagicMock) -> None:
|
||||
stream_name = "Macbeth"
|
||||
hamlet = self.example_user("hamlet")
|
||||
|
|
|
@ -333,12 +333,13 @@ class MutedUsersTests(ZulipTestCase):
|
|||
|
||||
self.login("cordelia")
|
||||
with mock.patch("zerver.tornado.event_queue.maybe_enqueue_notifications") as m:
|
||||
result = self.client_patch(
|
||||
"/json/messages/" + str(message_id),
|
||||
dict(
|
||||
content="@**King Hamlet**",
|
||||
),
|
||||
)
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
result = self.client_patch(
|
||||
"/json/messages/" + str(message_id),
|
||||
dict(
|
||||
content="@**King Hamlet**",
|
||||
),
|
||||
)
|
||||
self.assert_json_success(result)
|
||||
m.assert_called_once()
|
||||
# `maybe_enqueue_notifications` was called for Hamlet after message edit mentioned him.
|
||||
|
|
Loading…
Reference in New Issue