Skip to content

Commit 4d6c31e

Browse files
committed
Convert groups API to _Backend
* Add REST imple * Add unittest coverage * Add functional test coverage * Use new listify Signed-off-by: Cole Robinson <[email protected]>
1 parent 6da2065 commit 4d6c31e

10 files changed

Lines changed: 94 additions & 6 deletions

bugzilla/_backendbase.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,17 @@ def externalbugs_remove(self, paramdict):
204204
raise NotImplementedError()
205205

206206

207+
##############
208+
# Group APIs #
209+
##############
210+
211+
def group_get(self, paramdict):
212+
"""
213+
https://bugzilla.readthedocs.io/en/latest/api/core/v1/group.html#get-group
214+
"""
215+
raise NotImplementedError()
216+
217+
207218
################
208219
# Product APIs #
209220
################

bugzilla/_backendrest.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ def externalbugs_update(self, paramdict):
167167
raise BugzillaError(
168168
"No REST API available yet for externalbugs_update")
169169

170+
def group_get(self, paramdict):
171+
return self._get("/group", paramdict)
172+
170173
def product_get(self, paramdict):
171174
return self._get("/product/get", paramdict)
172175
def product_get_accessible(self):

bugzilla/_backendxmlrpc.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,9 @@ def externalbugs_update(self, paramdict):
218218
def externalbugs_remove(self, paramdict):
219219
return self._xmlrpc_proxy.ExternalBugs.remove_external_bug(paramdict)
220220

221+
def group_get(self, paramdict):
222+
return self._xmlrpc_proxy.Group.get(paramdict)
223+
221224
def product_get(self, paramdict):
222225
return self._xmlrpc_proxy.Product.get(paramdict)
223226
def product_get_accessible(self):

bugzilla/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1913,7 +1913,7 @@ def _getgroups(self, names, membership=False):
19131913
"""
19141914
params = {"membership": membership}
19151915
params['names'] = listify(names)
1916-
return self._proxy.Group.get(params)
1916+
return self._backend.group_get(params)
19171917

19181918
def getgroup(self, name, membership=False):
19191919
"""

bugzilla/bug.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -505,9 +505,6 @@ def members(self):
505505
"""
506506
Retrieve the members of this Group from bugzilla
507507
"""
508-
if self.membership:
509-
return self.membership
510-
511-
self.refresh(membership=True)
512-
508+
if not self.membership:
509+
self.refresh(membership=True)
513510
return self.membership
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{'membership': False, 'names': ['TestGroups']}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{'membership': True, 'names': ['TestGroup']}

tests/mockbackend.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ def component_get(self, *args):
8686
def component_update(self, *args):
8787
return self.__helper(args)
8888

89+
def group_get(self, *args):
90+
return self.__helper(args)
91+
8992
def externalbugs_add(self, *args):
9093
return self.__helper(args)
9194
def externalbugs_update(self, *args):

tests/test_api_groups.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#
2+
# Copyright Red Hat, Inc. 2012
3+
#
4+
# This work is licensed under the GNU GPLv2 or later.
5+
# See the COPYING file in the top-level directory.
6+
#
7+
8+
"""
9+
Test miscellaneous API bits
10+
"""
11+
12+
import tests
13+
import tests.mockbackend
14+
15+
16+
def test_api_groups():
17+
# Basic API testing of the users APIs
18+
group_ret = {"groups": [{
19+
"membership": [
20+
{"real_name": "Bugzilla User",
21+
"can_login": 1,
22+
"name": "[email protected]",
23+
"login_denied_text": "",
24+
"id": 85,
25+
"email_enabled": 1,
26+
"email": "[email protected]"},
27+
{"real_name": "Bugzilla User2",
28+
"can_login": 0,
29+
"name": "[email protected]",
30+
"login_denied_text": "",
31+
"id": 77,
32+
"email_enabled": 0,
33+
"email": "[email protected]"},
34+
],
35+
"is_active": 1,
36+
"description": "Test Group",
37+
"user_regexp": "",
38+
"is_bug_group": 1,
39+
"name": "TestGroup",
40+
"id": 9
41+
}]}
42+
43+
fakebz = tests.mockbackend.make_bz(
44+
group_get_args="data/mockargs/test_api_groups_get1.txt",
45+
group_get_return=group_ret)
46+
47+
# getgroups testing
48+
groupobj = fakebz.getgroups("TestGroups")[0]
49+
assert groupobj.groupid == 9
50+
assert groupobj.member_emails == [
51+
52+
assert groupobj.name == "TestGroup"
53+
54+
# getgroup testing
55+
fakebz = tests.mockbackend.make_bz(
56+
group_get_args="data/mockargs/test_api_groups_get2.txt",
57+
group_get_return=group_ret)
58+
groupobj = fakebz.getgroup("TestGroup", membership=True)
59+
groupobj.membership = []
60+
assert groupobj.members() == group_ret["groups"][0]["membership"]

tests/test_rw_functional.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,15 @@ def test11UserUpdate(backends):
696696
assert group in user.groupnames
697697
origgroups = user.groupnames
698698

699+
# Test group_get
700+
try:
701+
group = bz.getgroup("fedora_contrib")
702+
group.refresh()
703+
except Exception as e:
704+
if have_admin:
705+
raise
706+
assert bugzilla.BugzillaError.get_bugzilla_error_code(e) == 805
707+
699708
# Remove the group
700709
try:
701710
bz.updateperms(email, "remove", [group])

0 commit comments

Comments
 (0)