From 79f4a7627faa568d0a8ccb658bbe695d39252d30 Mon Sep 17 00:00:00 2001 From: Umair Khan Date: Tue, 14 Nov 2017 12:01:50 +0500 Subject: [PATCH] user-groups: Send remove members event. --- zerver/lib/actions.py | 3 +++ zerver/lib/events.py | 6 ++++++ zerver/tests/test_events.py | 13 +++++++++++++ 3 files changed, 22 insertions(+) diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index b1e98aed4b..7c7d280277 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -4358,3 +4358,6 @@ def remove_members_from_user_group(user_group, user_profiles): UserGroupMembership.objects.filter( user_group_id=user_group.id, user_profile__in=user_profiles).delete() + + user_ids = [up.id for up in user_profiles] + do_send_user_group_members_update_event('remove_members', user_group, user_ids) diff --git a/zerver/lib/events.py b/zerver/lib/events.py index 3d371189a9..6d948c6305 100644 --- a/zerver/lib/events.py +++ b/zerver/lib/events.py @@ -565,6 +565,12 @@ def apply_event(state, event, user_profile, client_gravatar, include_subscribers if user_group['id'] == event['group_id']: user_group['members'].extend(event['user_ids']) user_group['members'].sort() + elif event['op'] == 'remove_members': + for user_group in state['realm_user_groups']: + if user_group['id'] == event['group_id']: + members = set(user_group['members']) + user_group['members'] = list(members - set(event['user_ids'])) + user_group['members'].sort() else: raise AssertionError("Unexpected event type %s" % (event['type'],)) diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py index bdfe7ea223..cedd91a7c9 100644 --- a/zerver/tests/test_events.py +++ b/zerver/tests/test_events.py @@ -79,6 +79,7 @@ from zerver.lib.actions import ( do_update_user_group_name, do_update_user_group_description, bulk_add_members_to_user_group, + remove_members_from_user_group, ) from zerver.lib.events import ( apply_events, @@ -1048,6 +1049,18 @@ class EventsRegisterTest(ZulipTestCase): error = user_group_add_member_checker('events[0]', events[0]) self.assert_on_error(error) + # Test remove members + user_group_remove_member_checker = self.check_events_dict([ + ('type', equals('user_group')), + ('op', equals('remove_members')), + ('group_id', check_int), + ('user_ids', check_list(check_int)), + ]) + hamlet = self.example_user('hamlet') + events = self.do_test(lambda: remove_members_from_user_group(backend, [hamlet])) + error = user_group_remove_member_checker('events[0]', events[0]) + self.assert_on_error(error) + def test_default_stream_groups_events(self): # type: () -> None default_stream_groups_checker = self.check_events_dict([