From 233d250eff4081cf2c300141cff5db7863837404 Mon Sep 17 00:00:00 2001 From: Aman Agrawal Date: Tue, 10 Nov 2020 18:41:19 +0530 Subject: [PATCH] do_make_stream_web_public: Send update to client. Send update event to client after a stream is made web public. This has been documented in the API documentation since feature level 73; previously the value was always false. --- zerver/lib/actions.py | 15 +++++++++++++++ zerver/lib/events.py | 13 +++++++++++++ zerver/tests/test_events.py | 15 +++++++++++---- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 4b53b6a6eb..7bf72418b7 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -4822,6 +4822,21 @@ def do_make_stream_web_public(stream: Stream) -> None: stream.history_public_to_subscribers = True stream.save(update_fields=["invite_only", "history_public_to_subscribers", "is_web_public"]) + # We reuse "invite_only" stream update API route here because + # both are similar events and similar UI updates will be required + # by the client to update this property for the user. + event = dict( + op="update", + type="stream", + property="invite_only", + value=False, + history_public_to_subscribers=True, + is_web_public=True, + stream_id=stream.id, + name=stream.name, + ) + send_event(stream.realm, event, can_access_stream_user_ids(stream)) + def do_change_stream_permission( stream: Stream, diff --git a/zerver/lib/events.py b/zerver/lib/events.py index acaaff16c9..53e82529aa 100644 --- a/zerver/lib/events.py +++ b/zerver/lib/events.py @@ -887,6 +887,12 @@ def apply_event( obj[event["property"]] = event["value"] if event["property"] == "description": obj["rendered_description"] = event["rendered_description"] + if event.get("history_public_to_subscribers") is not None: + obj["history_public_to_subscribers"] = event[ + "history_public_to_subscribers" + ] + if event.get("is_web_public") is not None: + obj["is_web_public"] = event["is_web_public"] # Also update the pure streams data if "streams" in state: for stream in state["streams"]: @@ -896,6 +902,13 @@ def apply_event( stream[prop] = event["value"] if prop == "description": stream["rendered_description"] = event["rendered_description"] + if event.get("history_public_to_subscribers") is not None: + stream["history_public_to_subscribers"] = event[ + "history_public_to_subscribers" + ] + if event.get("is_web_public") is not None: + stream["is_web_public"] = event["is_web_public"] + elif event["type"] == "default_streams": state["realm_default_streams"] = event["default_streams"] elif event["type"] == "default_stream_groups": diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py index 58c2934d4d..ed4e934319 100644 --- a/zerver/tests/test_events.py +++ b/zerver/tests/test_events.py @@ -42,8 +42,8 @@ from zerver.lib.actions import ( do_change_plan_type, do_change_realm_domain, do_change_stream_description, - do_change_stream_invite_only, do_change_stream_message_retention_days, + do_change_stream_permission, do_change_stream_post_policy, do_change_subscription_property, do_change_user_delivery_email, @@ -2416,9 +2416,16 @@ class SubscribeActionTest(BaseAction): events = self.verify_action(action, include_subscribers=include_subscribers) check_stream_update("events[0]", events[0]) - # Update stream privacy - action = lambda: do_change_stream_invite_only( - stream, True, history_public_to_subscribers=True + # Update stream privacy - make stream web public + action = lambda: do_change_stream_permission( + stream, invite_only=False, history_public_to_subscribers=True, is_web_public=True + ) + events = self.verify_action(action, include_subscribers=include_subscribers) + check_stream_update("events[0]", events[0]) + + # Update stream privacy - make stream private + action = lambda: do_change_stream_permission( + stream, invite_only=True, history_public_to_subscribers=True, is_web_public=False ) events = self.verify_action(action, include_subscribers=include_subscribers) check_stream_update("events[0]", events[0])