def test_update_members_of_user_group(self) -> None: hamlet = self.example_user('hamlet') self.login(self.example_email("hamlet")) params = { 'name': 'support', 'members': ujson.dumps([hamlet.id]), 'description': 'Support team', } self.client_post('/json/user_groups/create', info=params) user_group = UserGroup.objects.first() # Test add members self.assertEqual(UserGroupMembership.objects.count(), 3) othello = self.example_user('othello') add = [othello.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) # Test adding a member already there. result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_error(result, "User 6 is already a member of this group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) # Test remove members params = {'delete': ujson.dumps([hamlet.id, othello.id])} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 2) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 0) # Test remove a member that's already removed; arguably we should make this an error. params = {'delete': ujson.dumps([hamlet.id, othello.id])} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 2) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 0) # Test when nothing is provided result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info={}) msg = 'Nothing to do. Specify at least one of "add" or "delete".' self.assert_json_error(result, msg)
def test_update_members_of_user_group(self) -> None: hamlet = self.example_user('hamlet') self.login(self.example_email("hamlet")) params = { 'name': 'support', 'members': ujson.dumps([hamlet.id]), 'description': 'Support team', } self.client_post('/json/user_groups/create', info=params) user_group = UserGroup.objects.first() # Test add members self.assertEqual(UserGroupMembership.objects.count(), 3) othello = self.example_user('othello') add = [othello.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) # Test adding a member already there. result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_error(result, "User 6 is already a member of this group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) # Test remove members params = {'delete': ujson.dumps([hamlet.id, othello.id])} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 2) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 0) # Test remove a member that's already removed; arguably we should make this an error. params = {'delete': ujson.dumps([hamlet.id, othello.id])} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 2) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 0) # Test when nothing is provided result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info={}) msg = 'Nothing to do. Specify at least one of "add" or "delete".' self.assert_json_error(result, msg)
def test_update_members_of_user_group(self) -> None: hamlet = self.example_user("hamlet") self.login("hamlet") params = { "name": "support", "members": orjson.dumps([hamlet.id]).decode(), "description": "Support team", } self.client_post("/json/user_groups/create", info=params) user_group = UserGroup.objects.get(name="support") # Test add members self.assertEqual(UserGroupMembership.objects.count(), 3) othello = self.example_user("othello") add = [othello.id] params = {"add": orjson.dumps(add).decode()} result = self.client_post(f"/json/user_groups/{user_group.id}/members", info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assert_length(members, 2) # Test adding a member already there. result = self.client_post(f"/json/user_groups/{user_group.id}/members", info=params) self.assert_json_error(result, f"User {othello.id} is already a member of this group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assert_length(members, 2) aaron = self.example_user("aaron") # For normal testing we again log in with hamlet self.logout() self.login_user(hamlet) # Test remove members params = {"delete": orjson.dumps([othello.id]).decode()} result = self.client_post(f"/json/user_groups/{user_group.id}/members", info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 3) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assert_length(members, 1) # Test remove a member that's already removed params = {"delete": orjson.dumps([othello.id]).decode()} result = self.client_post(f"/json/user_groups/{user_group.id}/members", info=params) self.assert_json_error(result, f"There is no member '{othello.id}' in this user group") self.assertEqual(UserGroupMembership.objects.count(), 3) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assert_length(members, 1) # Test when nothing is provided result = self.client_post(f"/json/user_groups/{user_group.id}/members", info={}) msg = 'Nothing to do. Specify at least one of "add" or "delete".' self.assert_json_error(result, msg)
def check_removing_members_from_group( acting_user: str, error_msg: Optional[str] = None ) -> None: self.login(acting_user) params = {"delete": orjson.dumps([aaron.id]).decode()} result = self.client_post(f"/json/user_groups/{user_group.id}/members", info=params) if error_msg is None: self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 3) members = get_memberships_of_users(user_group, [aaron, othello]) self.assert_length(members, 1) else: self.assert_json_error(result, error_msg)
def add_members_to_group_backend(request: HttpRequest, user_profile: UserProfile, user_group_id: int, members: List[int]) -> HttpResponse: if not members: return json_success() user_group = access_user_group_by_id(user_group_id, user_profile) user_profiles = user_ids_to_users(members, user_profile.realm) existing_member_ids = set(get_memberships_of_users(user_group, user_profiles)) for user_profile in user_profiles: if user_profile.id in existing_member_ids: raise JsonableError(_("User %s is already a member of this group" % (user_profile.id,))) bulk_add_members_to_user_group(user_group, user_profiles) return json_success()
def add_members_to_group_backend(request: HttpRequest, user_profile: UserProfile, user_group_id: int, members: List[int]) -> HttpResponse: if not members: return json_success() user_group = access_user_group_by_id(user_group_id, user_profile) user_profiles = user_ids_to_users(members, user_profile.realm) existing_member_ids = set(get_memberships_of_users(user_group, user_profiles)) for user_profile in user_profiles: if user_profile.id in existing_member_ids: raise JsonableError(_("User %s is already a member of this group" % (user_profile.id,))) bulk_add_members_to_user_group(user_group, user_profiles) return json_success()
def test_update_members_of_user_group(self) -> None: hamlet = self.example_user('hamlet') self.login(self.example_email("hamlet")) params = { 'name': 'support', 'members': ujson.dumps([hamlet.id]), 'description': 'Support team', } self.client_post('/json/user_groups/create', info=params) user_group = UserGroup.objects.get(name='support') # Test add members self.assertEqual(UserGroupMembership.objects.count(), 3) othello = self.example_user('othello') add = [othello.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) # Test adding a member already there. result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_error(result, "User 6 is already a member of this group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) self.logout() # Test when user not a member of user group tries to add members to it cordelia = self.example_user('cordelia') self.login(cordelia.email) add = [cordelia.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_error( result, "Only group members and organization administrators can administer this group." ) self.assertEqual(UserGroupMembership.objects.count(), 4) self.logout() # Test when organization admin tries to add members to group iago = self.example_user('iago') self.login(iago.email) aaron = self.example_user('aaron') add = [aaron.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 5) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 3) # For normal testing we again login with hamlet self.logout() self.login(hamlet.email) # Test remove members params = {'delete': ujson.dumps([othello.id])} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 2) # Test remove a member that's already removed params = {'delete': ujson.dumps([othello.id])} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_error(result, "There is no member '6' in this user group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 2) # Test when nothing is provided result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info={}) msg = 'Nothing to do. Specify at least one of "add" or "delete".' self.assert_json_error(result, msg) # Test when user not a member of user group tries to remove members self.logout() self.login(cordelia.email) params = {'delete': ujson.dumps([hamlet.id])} result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_error( result, "Only group members and organization administrators can administer this group." ) self.assertEqual(UserGroupMembership.objects.count(), 4) self.logout() # Test when organization admin tries to remove members from group iago = self.example_user('iago') self.login(iago.email) result = self.client_post('/json/user_groups/{}/members'.format( user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 3) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 1)
def test_update_members_of_user_group(self) -> None: hamlet = self.example_user('hamlet') self.login(self.example_email("hamlet")) params = { 'name': 'support', 'members': ujson.dumps([hamlet.id]), 'description': 'Support team', } self.client_post('/json/user_groups/create', info=params) user_group = UserGroup.objects.get(name='support') # Test add members self.assertEqual(UserGroupMembership.objects.count(), 3) othello = self.example_user('othello') add = [othello.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) # Test adding a member already there. result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_error(result, "User 6 is already a member of this group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello]) self.assertEqual(len(members), 2) self.logout() # Test when user not a member of user group tries to add members to it cordelia = self.example_user('cordelia') self.login(cordelia.email) add = [cordelia.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_error(result, "Only group members and organization administrators can administer this group.") self.assertEqual(UserGroupMembership.objects.count(), 4) self.logout() # Test when organization admin tries to add members to group iago = self.example_user('iago') self.login(iago.email) aaron = self.example_user('aaron') add = [aaron.id] params = {'add': ujson.dumps(add)} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 5) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 3) # For normal testing we again login with hamlet self.logout() self.login(hamlet.email) # Test remove members params = {'delete': ujson.dumps([othello.id])} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 2) # Test remove a member that's already removed params = {'delete': ujson.dumps([othello.id])} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_error(result, "There is no member '6' in this user group") self.assertEqual(UserGroupMembership.objects.count(), 4) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 2) # Test when nothing is provided result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info={}) msg = 'Nothing to do. Specify at least one of "add" or "delete".' self.assert_json_error(result, msg) # Test when user not a member of user group tries to remove members self.logout() self.login(cordelia.email) params = {'delete': ujson.dumps([hamlet.id])} result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_error(result, "Only group members and organization administrators can administer this group.") self.assertEqual(UserGroupMembership.objects.count(), 4) self.logout() # Test when organization admin tries to remove members from group iago = self.example_user('iago') self.login(iago.email) result = self.client_post('/json/user_groups/{}/members'.format(user_group.id), info=params) self.assert_json_success(result) self.assertEqual(UserGroupMembership.objects.count(), 3) members = get_memberships_of_users(user_group, [hamlet, othello, aaron]) self.assertEqual(len(members), 1)