From 037d9e468ec870d794606d0dfdd366e4d4702860 Mon Sep 17 00:00:00 2001 From: Jana Librova Date: Tue, 25 Mar 2025 16:19:30 +0100 Subject: [PATCH] listUsers excepts userType as int, list and Nonetype Fixes: https://pagure.io/koji/issue/4325 --- kojihub/kojihub.py | 4 ++-- tests/test_hub/test_list_users.py | 38 +++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/kojihub/kojihub.py b/kojihub/kojihub.py index 2e1e4d93..8c90ef7a 100644 --- a/kojihub/kojihub.py +++ b/kojihub/kojihub.py @@ -13504,8 +13504,8 @@ class RootExports(object): if userType is not None: if isinstance(userType, int): userType = [userType] - else: - raise koji.ParameterError("userType must be integer or None") + elif not isinstance(userType, (list, tuple)): + raise koji.ParameterError("userType must be integer, list, tuple or None") clauses.append('usertype IN %(userType)s') fields = [ ('users.id', 'id'), diff --git a/tests/test_hub/test_list_users.py b/tests/test_hub/test_list_users.py index 06d039b2..d68cca3c 100644 --- a/tests/test_hub/test_list_users.py +++ b/tests/test_hub/test_list_users.py @@ -61,7 +61,7 @@ class TestListUsers(unittest.TestCase): self.assertEqual(query.joins, [ 'LEFT JOIN user_groups ON user_id = users.id AND user_groups.active IS TRUE', 'LEFT JOIN user_perms ON users.id = user_perms.user_id ' - 'OR group_id = user_perms.user_id', + 'OR group_id = user_perms.user_id', 'LEFT JOIN user_krb_principals ON users.id = user_krb_principals.user_id']) self.assertEqual(query.clauses, [ 'user_perms.active AND user_perms.perm_id = %(perm_id)s', @@ -81,8 +81,38 @@ class TestListUsers(unittest.TestCase): self.assertEqual('queryOpts.group is not available for this API', str(cm.exception)) self.assertEqual(len(self.queries), 0) - def test_usertype_not_int_or_none(self): + def test_usertype_is_list(self): + self.exports.listUsers(userType=[1]) + + self.assertEqual(len(self.queries), 1) + query = self.queries[0] + self.assertEqual(query.tables, ['users']) + self.assertEqual(query.joins, [ + 'LEFT JOIN user_krb_principals ON users.id = user_krb_principals.user_id']) + self.assertEqual(query.clauses, ['usertype IN %(userType)s']) + + def test_usertype_is_tuple(self): + self.exports.listUsers(userType=(1, 2)) + + self.assertEqual(len(self.queries), 1) + query = self.queries[0] + self.assertEqual(query.tables, ['users']) + self.assertEqual(query.joins, [ + 'LEFT JOIN user_krb_principals ON users.id = user_krb_principals.user_id']) + self.assertEqual(query.clauses, ['usertype IN %(userType)s']) + + def test_usertype_is_integer(self): + self.exports.listUsers(userType=1) + + self.assertEqual(len(self.queries), 1) + query = self.queries[0] + self.assertEqual(query.tables, ['users']) + self.assertEqual(query.joins, [ + 'LEFT JOIN user_krb_principals ON users.id = user_krb_principals.user_id']) + self.assertEqual(query.clauses, ['usertype IN %(userType)s']) + + def test_usertype_invalid(self): with self.assertRaises(koji.GenericError) as cm: - self.exports.listUsers(userType=[1]) - self.assertEqual('userType must be integer or None', str(cm.exception)) + self.exports.listUsers(userType='usertype') + self.assertEqual('userType must be integer, list, tuple or None', str(cm.exception)) self.assertEqual(len(self.queries), 0)