diff --git a/static/js/server_events.js b/static/js/server_events.js index b2f594dbab..390759319a 100644 --- a/static/js/server_events.js +++ b/static/js/server_events.js @@ -99,8 +99,9 @@ function get_events_success(events) { subs.mark_subscribed(sub.name, sub); }); } else if (event.op === 'remove') { - _.each(event.subscriptions, function (sub) { - subs.mark_unsubscribed(sub.name); + _.each(event.subscriptions, function (rec) { + var sub = stream_data.get_sub_by_id(rec.stream_id); + subs.mark_sub_unsubscribed(sub); }); } else if (event.op === 'update') { subs.update_subscription_properties(event.name, event.property, event.value); diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index fb58656132..acaa0cb4ee 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -1054,7 +1054,7 @@ def notify_subscriptions_removed(user_profile, streams, no_log=False): 'names': [stream.name for stream in streams], 'domain': stream.realm.domain}) - payload = [dict(name=stream.name) for stream in streams] + payload = [dict(name=stream.name, stream_id=stream.id) for stream in streams] event = dict(type="subscription", op="remove", subscriptions=payload) send_event(event, [user_profile.id]) diff --git a/zerver/test_events.py b/zerver/test_events.py index 92f699da52..59a08c992f 100644 --- a/zerver/test_events.py +++ b/zerver/test_events.py @@ -295,6 +295,7 @@ class EventsRegisterTest(AuthedTestCase): ('subscriptions', check_list( check_dict([ ('name', equals('test_stream')), + ('stream_id', check_int), ]), )), ]) diff --git a/zerver/test_subs.py b/zerver/test_subs.py index 9e77071551..91890ce7b1 100644 --- a/zerver/test_subs.py +++ b/zerver/test_subs.py @@ -231,7 +231,7 @@ class StreamAdminTest(AuthedTestCase): self.assertEqual(deletion_event, dict( op='remove', type='subscription', - subscriptions=[{'name': active_name}] + subscriptions=[{'name': active_name, 'stream_id': stream.id}] )) else: # You could delete the stream, but you weren't on it so you don't