Example #1
0
 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>'
     )
Example #2
0
 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__())
Example #3
0
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
Example #4
0
 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),
         []
     )
Example #5
0
 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__()
     )
Example #6
0
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
Example #7
0
 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
                 )
             ]
         )
     )
Example #8
0
    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))
Example #9
0
 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>')
Example #10
0
    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))