Inherit group permissions

Related: https://pagure.io/koji/issue/3849
This commit is contained in:
Tomas Kopecek 2023-06-19 09:57:04 +02:00
parent d324f601c8
commit 255ec21d00
7 changed files with 63 additions and 21 deletions

View file

@ -85,7 +85,7 @@ class TestListPermissions(utils.CliTestCase):
self.activate_session_mock.assert_called_once()
self.session.getUser.assert_called_once()
self.session.getUserPerms.assert_called_once()
self.session.getUserPerms.assert_called()
self.session.getPerms.assert_not_called()
self.session.getAllPerms.assert_not_called()
@ -108,7 +108,7 @@ repo
self.activate_session_mock.assert_called_once()
self.session.getUser.assert_called_once()
self.session.getUserPerms.assert_called_once()
self.session.getUserPerms.assert_called()
self.session.getPerms.assert_not_called()
self.session.getAllPerms.assert_not_called()
@ -119,14 +119,15 @@ repo
repo
"""
perms = [p['name'] for p in self.all_perms[1:3]]
self.session.getPerms.return_value = perms
self.session.getLoggedInUser.return_value = {'id': 1, 'name': 'user'}
self.session.getUserPerms.return_value = perms
handle_list_permissions(self.options, self.session, ['--mine'])
self.assert_console_message(stdout, expected)
self.activate_session_mock.assert_called_once()
self.session.getUser.assert_not_called()
self.session.getUserPerms.assert_not_called()
self.session.getPerms.assert_called_once()
self.session.getUser.assert_called_once()
self.session.getUserPerms.assert_called()
self.session.getPerms.assert_not_called()
self.session.getAllPerms.assert_not_called()
@mock.patch('sys.stdout', new_callable=six.StringIO)

View file

@ -21,4 +21,4 @@ class TestGetUserPerms(unittest.TestCase):
def test_normal(self):
self.get_user.return_value = {'id': 123, 'name': 'testuser'}
kojihub.RootExports().getUserPerms(123)
self.get_user_perms.assert_called_once_with(123)
self.get_user_perms.assert_called_once_with(123, with_groups=True)

View file

@ -703,19 +703,37 @@ class TestAuthSession(unittest.TestCase):
query = self.queries[0]
self.assertEqual(query.tables, ['user_groups'])
self.assertEqual(query.joins, ['users ON group_id = users.id'])
self.assertEqual(query.clauses, ['active = TRUE', 'user_id=%(user_id)i',
self.assertEqual(query.clauses, ['active IS TRUE', 'user_id=%(user_id)i',
'users.usertype=%(t_group)i'])
self.assertEqual(query.columns, ['group_id', 'name'])
def test_get_user_perms(self):
"""auth.get_user_perms"""
kojihub.auth.get_user_perms(1)
self.assertEqual(len(self.queries), 1)
self.assertEqual(len(self.queries), 2)
query = self.queries[0]
self.assertEqual(query.tables, ['user_perms'])
self.assertEqual(query.joins, ['permissions ON perm_id = permissions.id'])
self.assertEqual(query.clauses, ['active = TRUE', 'user_id=%(user_id)s'])
self.assertEqual(query.clauses, ['active IS TRUE', 'user_id=%(user_id)s'])
self.assertEqual(query.columns, ['name'])
query = self.queries[1]
self.assertEqual(query.tables, ['user_groups'])
self.assertEqual(query.joins, [
'LEFT JOIN user_perms ON user_perms.user_id = user_groups.group_id',
'permissions ON perm_id = permissions.id'])
self.assertEqual(sorted(query.clauses), sorted([
'user_groups.active IS TRUE',
'user_perms.active IS TRUE',
'user_groups.user_id=%(user_id)s']))
self.assertEqual(query.columns, ['name'])
def test_get_user_perms_inherited(self):
self.query_execute.side_effect = [
[{'id': 1, 'name': 'perm1'}, {'id': 2, 'name': 'perm2'}],
[{'id': 3, 'name': 'perm3'}]
]
result = kojihub.auth.get_user_perms(1)
self.assertEqual(set(result), {'perm1', 'perm2', 'perm3'})
def test_logout_logged_not_owner(self):
s, _ = self.get_session()