def test_user_group_repr(self): """Test for UserGroup __repr__""" user_group = UserGroup('foo', 'bar') self.assertEqual( user_group.__repr__(), '<username:foo | group_type:bar>' )
def test_user_group_hash(self): """Test for UserGroup __hash__""" user_group1 = UserGroup('foo1', 'bar') user_group2 = UserGroup('foo1', 'bar') self.assertEqual(user_group1.__hash__(), hash((user_group1.username, user_group1.group_type))) self.assertEqual(user_group1.__hash__(), user_group2.__hash__()) user_group2.username = '******' self.assertNotEqual(user_group1.__hash__(), user_group2.__hash__())
def list_users_in_repo(repo, base_group_type=None): """ List all the users in the repository groups. If the group type is specified, the list is limited to that group. Args: repo (learningresources.models.Repository): repository used to extract the right group to use base_group_type (unicode): group type from roles.permissions.BaseGroupTypes Returns: list (list of roles.user_models.UserGroup): list of users in one or all the repository groups """ users_groups = [] if base_group_type is not None: if not BaseGroupTypes.is_base_group_type(base_group_type): raise InvalidGroupType base_group_types = [base_group_type] else: base_group_types = BaseGroupTypes.all_base_groups() for base_group_type in base_group_types: group = Group.objects.get(name=GroupTypes.get_repo_groupname_by_base( base_group_type).format(repo.slug)) users_groups += [ UserGroup(user.username, base_group_type) for user in group.user_set.all() ] return users_groups
def test_list_users_in_repo_base_group_type_specified(self): """ Test for list_users_in_repo """ self.assertListEqual( api.list_users_in_repo(self.repo), [ UserGroup(self.user.username, BaseGroupTypes.ADMINISTRATORS) ] ) self.assertListEqual( api.list_users_in_repo(self.repo, BaseGroupTypes.ADMINISTRATORS), [ UserGroup(self.user.username, BaseGroupTypes.ADMINISTRATORS) ] ) self.assertListEqual( api.list_users_in_repo(self.repo, BaseGroupTypes.CURATORS), [] ) self.assertListEqual( api.list_users_in_repo(self.repo, BaseGroupTypes.AUTHORS), [] )
def test_user_group_hash(self): """Test for UserGroup __hash__""" user_group1 = UserGroup('foo1', 'bar') user_group2 = UserGroup('foo1', 'bar') self.assertEqual( user_group1.__hash__(), hash((user_group1.username, user_group1.group_type)) ) self.assertEqual( user_group1.__hash__(), user_group2.__hash__() ) user_group2.username = '******' self.assertNotEqual( user_group1.__hash__(), user_group2.__hash__() )
def is_last_admin_in_repo(user, repo): """ Check if user is the last administrator in the repository. It does not check if the user is an actual administrator and in that case it will simply return False Args: user (django.contrib.auth.models.User): user repo (learningresources.models.Repository): repository used to extract the right group to use Returns: bool """ admins_in_repo = list_users_in_repo( repo, base_group_type=BaseGroupTypes.ADMINISTRATORS) return (UserGroup(user.username, BaseGroupTypes.ADMINISTRATORS) in admins_in_repo) and len(admins_in_repo) == 1
def test_list_users_in_repo_no_base_group_type_specified(self): """ Test for list_users_in_repo """ self.assertListEqual( api.list_users_in_repo(self.repo), [ UserGroup(self.user.username, BaseGroupTypes.ADMINISTRATORS) ] ) # Remove the user from the administrators. api.remove_user_from_repo_group( self.user, self.repo, GroupTypes.REPO_ADMINISTRATOR ) # No users in the repo. self.assertListEqual( api.list_users_in_repo(self.repo), [] ) # Add user to the curators. api.assign_user_to_repo_group( self.user, self.repo, GroupTypes.REPO_CURATOR ) self.assertListEqual( api.list_users_in_repo(self.repo), [ UserGroup(self.user.username, BaseGroupTypes.CURATORS) ] ) # Add user back to the administrators. api.assign_user_to_repo_group( self.user, self.repo, GroupTypes.REPO_ADMINISTRATOR ) self.assertListEqual( self.sort_user_group( api.list_users_in_repo(self.repo) ), self.sort_user_group( [ UserGroup( self.user.username, BaseGroupTypes.ADMINISTRATORS ), UserGroup( self.user.username, BaseGroupTypes.CURATORS ) ] ) ) # Add another user to the authors. api.assign_user_to_repo_group( self.user_norepo, self.repo, GroupTypes.REPO_AUTHOR ) self.assertListEqual( self.sort_user_group( api.list_users_in_repo(self.repo) ), self.sort_user_group( [ UserGroup( self.user.username, BaseGroupTypes.ADMINISTRATORS ), UserGroup( self.user.username, BaseGroupTypes.CURATORS ), UserGroup( self.user_norepo.username, BaseGroupTypes.AUTHORS ) ] ) ) # Adding again the same user in the same group # will not create multiple instances. api.assign_user_to_repo_group( self.user_norepo, self.repo, GroupTypes.REPO_AUTHOR ) self.assertListEqual( self.sort_user_group( api.list_users_in_repo(self.repo) ), self.sort_user_group( [ UserGroup( self.user.username, BaseGroupTypes.ADMINISTRATORS ), UserGroup( self.user.username, BaseGroupTypes.CURATORS ), UserGroup( self.user_norepo.username, BaseGroupTypes.AUTHORS ) ] ) )
def test_user_group_eq_ne(self): """Test for UserGroup __eq__ and __ne__""" user_group1 = UserGroup('foo1', 'bar') user_group2 = UserGroup('foo1', 'bar') self.assertTrue(user_group1.__eq__(user_group2)) self.assertFalse(user_group1.__ne__(user_group2)) user_group2 = UserGroup('foo2', 'bar') self.assertFalse(user_group1.__eq__(user_group2)) self.assertTrue(user_group1.__ne__(user_group2)) user_group1 = UserGroup('foo1', 'bar1') user_group2 = UserGroup('foo1', 'bar2') self.assertFalse(user_group1.__eq__(user_group2)) self.assertTrue(user_group1.__ne__(user_group2)) # Making equal objects user_group2 = UserGroup('foo1', 'bar1') # Removing an attribute of the second object. user_group2.__dict__.pop('username') self.assertFalse(user_group1.__eq__(user_group2)) self.assertTrue(user_group1.__ne__(user_group2)) # define a different object class FooObject(object): """Foo object""" def __init__(self, foo_var): self.foo_var = foo_var user_group2 = FooObject('bar') self.assertFalse(user_group1.__eq__(user_group2))
def test_user_group_repr(self): """Test for UserGroup __repr__""" user_group = UserGroup('foo', 'bar') self.assertEqual(user_group.__repr__(), '<username:foo | group_type:bar>')
def test_user_group_eq_ne(self): """Test for UserGroup __eq__ and __ne__""" user_group1 = UserGroup('foo1', 'bar') user_group2 = UserGroup('foo1', 'bar') self.assertTrue(user_group1.__eq__(user_group2)) self.assertFalse(user_group1.__ne__(user_group2)) user_group2 = UserGroup('foo2', 'bar') self.assertFalse(user_group1.__eq__(user_group2)) self.assertTrue(user_group1.__ne__(user_group2)) user_group1 = UserGroup('foo1', 'bar1') user_group2 = UserGroup('foo1', 'bar2') self.assertFalse(user_group1.__eq__(user_group2)) self.assertTrue(user_group1.__ne__(user_group2)) # Making equal objects user_group2 = UserGroup('foo1', 'bar1') # Removing an attribute of the second object. user_group2.__dict__.pop('username') self.assertFalse(user_group1.__eq__(user_group2)) self.assertTrue(user_group1.__ne__(user_group2)) # define a different object class FooObject(object): """Foo object""" def __init__(self, foo_var): self.foo_var = foo_var foo_object = FooObject('bar') self.assertFalse(user_group1.__eq__(foo_object))