diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 97b8266759..af5f45191e 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -86,6 +86,14 @@ def log_event(event): def active_user_ids(realm): return [userdict['id'] for userdict in get_active_user_dicts_in_realm(realm)] +def stream_user_ids(stream): + subscriptions = Subscription.objects.filter(recipient__type=Recipient.STREAM, + recipient__type_id=stream.id) + if stream.invite_only: + subscriptions = subscriptions.filter(active=True) + + return [sub['user_profile_id'] for sub in subscriptions.values('user_profile_id')] + def notify_created_user(user_profile): event = dict(type="realm_user", op="add", person=dict(email=user_profile.email, @@ -1246,7 +1254,7 @@ def do_rename_stream(realm, old_name, new_name, log=True): value=new_name, name=old_name ) - send_event(event, active_user_ids(realm)) + send_event(event, stream_user_ids(stream)) # Even though the token doesn't change, the web client needs to update the # email forwarding address to display the correctly-escaped new name. @@ -1260,7 +1268,7 @@ def do_change_stream_description(realm, stream_name, new_description): event = dict(type='stream', op='update', property='description', name=stream_name, value=new_description) - send_event(event, active_user_ids(realm)) + send_event(event, stream_user_ids(stream)) return {} def do_create_realm(domain, name, restricted_to_domain=True): diff --git a/zerver/tests.py b/zerver/tests.py index 231bb817ca..1134c3ff7d 100644 --- a/zerver/tests.py +++ b/zerver/tests.py @@ -391,6 +391,8 @@ class StreamAdminTest(AuthedTestCase): value='stream_name2', name='stream_name1' )) + users = events[0]['users'] + self.assertEqual(users, [user_profile.id]) stream_name1_exists = Stream.objects.filter( name='stream_name1', @@ -422,10 +424,23 @@ class StreamAdminTest(AuthedTestCase): do_add_subscription(user_profile, stream, no_log=True) do_change_is_admin(user_profile, True) - result = self.client_patch('/json/streams/stream_name1', - {'description': ujson.dumps('Test description')}) + events = [] + with tornado_redirected_to_list(events): + result = self.client_patch('/json/streams/stream_name1', + {'description': ujson.dumps('Test description')}) self.assert_json_success(result) + event = events[0]['event'] + self.assertEqual(event, dict( + op='update', + type='stream', + property='description', + value='Test description', + name='stream_name1' + )) + users = events[0]['users'] + self.assertEqual(users, [user_profile.id]) + stream = Stream.objects.get( name='stream_name1', realm=realm, @@ -436,6 +451,7 @@ class StreamAdminTest(AuthedTestCase): email = 'hamlet@zulip.com' self.login(email) user_profile = get_user_profile_by_email(email) + realm = user_profile.realm stream, _ = create_stream_if_needed(realm, 'stream_name1') do_add_subscription(user_profile, stream, no_log=True)