diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 1683a1a166..9e63899313 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -4649,6 +4649,9 @@ def do_update_message(user_profile: UserProfile, message: Message, topic_name: O def do_delete_messages(realm: Realm, messages: Iterable[Message]) -> None: message_ids = [message.id for message in messages] + if not message_ids: + return + usermessages = UserMessage.objects.filter(message_id__in=message_ids) message_id_to_notifiable_users = {} # type: Dict[int, List[Dict[str, int]]] for um in usermessages: diff --git a/zerver/tests/test_messages.py b/zerver/tests/test_messages.py index 95a99fb5ae..6db4faf682 100644 --- a/zerver/tests/test_messages.py +++ b/zerver/tests/test_messages.py @@ -328,6 +328,14 @@ class TopicDeleteTest(ZulipTestCase): self.assert_json_success(result) self.assertEqual(self.get_last_message().id, last_msg_id) + # Try to delete all messages in the topic again. There are no messages accessible + # to the administrator, so this should do nothing. + result = self.client_post(endpoint, { + "topic_name": topic_name + }) + self.assert_json_success(result) + self.assertEqual(self.get_last_message().id, last_msg_id) + # Make the stream's history public to subscribers do_change_stream_invite_only(stream, invite_only=True, history_public_to_subscribers=True) @@ -338,6 +346,13 @@ class TopicDeleteTest(ZulipTestCase): self.assert_json_success(result) self.assertEqual(self.get_last_message().id, initial_last_msg_id) + # Delete again, to test the edge case of deleting an empty topic. + result = self.client_post(endpoint, { + "topic_name": topic_name + }) + self.assert_json_success(result) + self.assertEqual(self.get_last_message().id, initial_last_msg_id) + class TestCrossRealmPMs(ZulipTestCase): def make_realm(self, domain: str) -> Realm: realm = Realm.objects.create(string_id=domain, invite_required=False)