message_send: Fix stream still inactive after sending message.

We updated the stream property but forgot to inform the client.
This commit is contained in:
Aman Agrawal
2025-01-03 06:39:28 +00:00
committed by Tim Abbott
parent 0188e5c2ac
commit 0a6579640f
2 changed files with 32 additions and 2 deletions

View File

@@ -99,7 +99,12 @@ from zerver.models.groups import SystemGroups
from zerver.models.recipients import get_direct_message_group_user_ids
from zerver.models.scheduled_jobs import NotificationTriggers
from zerver.models.streams import get_stream, get_stream_by_id_in_realm
from zerver.models.users import get_system_bot, get_user_by_delivery_email, is_cross_realm_bot_email
from zerver.models.users import (
active_user_ids,
get_system_bot,
get_user_by_delivery_email,
is_cross_realm_bot_email,
)
from zerver.tornado.django_api import send_event_on_commit
@@ -1170,6 +1175,18 @@ def do_send_messages(
if not send_request.stream.is_recently_active:
send_request.stream.is_recently_active = True
stream_update_fields.append("is_recently_active")
stream_update_event = dict(
type="stream",
op="update",
property="is_recently_active",
value=True,
stream_id=send_request.stream.id,
name=send_request.stream.name,
)
send_event_on_commit(
send_request.realm, stream_update_event, active_user_ids(send_request.realm.id)
)
if len(stream_update_fields) > 0:
send_request.stream.save(update_fields=stream_update_fields)

View File

@@ -2403,7 +2403,20 @@ class StreamMessagesTest(ZulipTestCase):
# Send a message to the stream
sender = self.example_user("hamlet")
self.subscribe(sender, stream.name)
self.send_stream_message(sender, stream.name)
# One message send event and one stream property update event.
with self.capture_send_event_calls(expected_num_events=2) as events:
self.send_stream_message(sender, stream.name, skip_capture_on_commit_callbacks=True)
has_stream_update_event = False
for event in events:
if event["event"]["type"] == "stream":
stream_update_event = event["event"]
has_stream_update_event = True
self.assertEqual(stream_update_event["op"], "update")
self.assertEqual(stream_update_event["property"], "is_recently_active")
self.assertEqual(stream_update_event["value"], True)
self.assertTrue(has_stream_update_event)
# The stream should now be active
stream.refresh_from_db()
self.assertEqual(stream.is_recently_active, True)