Skip to content

Commit 09d25dc

Browse files
committed
Fix failures introduced by f859fb8
The change in f859fb8 assumed that GitHub would respond to API requests to /organizations/$org_name/team/$team_id, but it doesn't. The only supported URL seems to be /organizations/$org_id/team/$team_id, so we need to somehow query the teams using both their org and team IDs. Fortunately GitHub includes an "url" field in the response for listing teams that can be used to obtain the correct path. Use this field to determine the correct URL and adjust the test harness to match GitHub's actual behavior.
1 parent a2314c1 commit 09d25dc

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

runtests.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,17 +1519,19 @@ def test_006_normal_operation(self):
15191519
'/orgs/%s/teams' % self.organization: [
15201520
{
15211521
"id": 1,
1522+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
15221523
"name": u"Justice League",
15231524
"slug": u"justice-league"
15241525
},
15251526
{
15261527
"id": 12,
1528+
"url": u"%sorganizations/14143/team/12" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
15271529
"name": u"The League of Extraordinary Gentlemen and Gentlewomen",
15281530
"slug": u"gentlepeople"
15291531
}
15301532
],
1531-
'/organizations/%s/team/1/members' % self.organization: team1members,
1532-
'/organizations/%s/team/12/members' % self.organization: team12members
1533+
'/organizations/14143/team/1/members': team1members,
1534+
'/organizations/14143/team/12/members': team12members
15331535
})
15341536

15351537
with TracContext(self, env=self.tracd_env_debug, **self.trac_env):
@@ -1702,22 +1704,25 @@ def test_012_hook_membership_event_delete_team(self):
17021704
'/orgs/%s/teams' % self.organization: [
17031705
{
17041706
"id": 1,
1707+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
17051708
"name": u"Justice League",
17061709
"slug": u"justice-league"
17071710
},
17081711
{
17091712
"id": 12,
1713+
"url": u"%sorganizations/14143/team/12" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
17101714
"name": u"The League of Extraordinary Gentlemen and Gentlewomen",
17111715
"slug": u"gentlepeople"
17121716
}
17131717
],
1714-
'/organizations/%s/team/1/members' % self.organization: team1members,
1715-
'/organizations/%s/team/12/members' % self.organization: team12members
1718+
'/organizations/14143/team/1/members': team1members,
1719+
'/organizations/14143/team/12/members': team12members
17161720
})
17171721

17181722
update = {
17191723
"team": {
17201724
"id": 1,
1725+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
17211726
"name": u"Justice League",
17221727
"deleted": True
17231728
}
@@ -1740,11 +1745,12 @@ def test_012_hook_membership_event_delete_team(self):
17401745
'/orgs/%s/teams' % self.organization: [
17411746
{
17421747
"id": 12,
1748+
"url": u"%sorganizations/14143/team/12" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
17431749
"name": u"The League of Extraordinary Gentlemen and Gentlewomen",
17441750
"slug": u"gentlepeople"
17451751
}
17461752
],
1747-
'/organizations/%s/team/12/members' % self.organization: team12members
1753+
'/organizations/14143/team/12/members': team12members
17481754
})
17491755

17501756
# Send the delete event
@@ -1782,6 +1788,7 @@ def test_013_hook_membership_event_delete_nonexistant_team(self):
17821788
update = {
17831789
"team": {
17841790
"id": 1,
1791+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
17851792
"name": u"Justice League",
17861793
"deleted": True
17871794
}
@@ -1809,6 +1816,7 @@ def test_014_hook_membership_event_add_team(self):
18091816
update = {
18101817
"team": {
18111818
"id": 1,
1819+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
18121820
"name": u"Justice League",
18131821
"slug": u"justice-league"
18141822
}
@@ -1825,11 +1833,12 @@ def test_014_hook_membership_event_add_team(self):
18251833
'/orgs/%s/teams' % self.organization: [
18261834
{
18271835
"id": 1,
1836+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
18281837
"name": u"Justice League",
18291838
"slug": u"justice-league"
18301839
},
18311840
],
1832-
'/organizations/%s/team/1/members' % self.organization: team1members,
1841+
'/organizations/14143/team/1/members': team1members,
18331842
})
18341843

18351844
# Send the update event
@@ -1868,16 +1877,18 @@ def test_015_hook_membership_event_add_member(self):
18681877
'/orgs/%s/teams' % self.organization: [
18691878
{
18701879
"id": 1,
1880+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
18711881
"name": u"Justice League",
18721882
"slug": u"justice-league"
18731883
},
18741884
],
1875-
'/organizations/%s/team/1/members' % self.organization: list(team1members)
1885+
'/organizations/14143/team/1/members': list(team1members)
18761886
})
18771887

18781888
update = {
18791889
"team": {
18801890
"id": 1,
1891+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
18811892
"name": u"Justice League",
18821893
"slug": u"justice-league"
18831894
}
@@ -1890,11 +1901,12 @@ def test_015_hook_membership_event_add_member(self):
18901901
'/orgs/%s/teams' % self.organization: [
18911902
{
18921903
"id": 1,
1904+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
18931905
"name": u"Justice League",
18941906
"slug": u"justice-league"
18951907
},
18961908
],
1897-
'/organizations/%s/team/1/members' % self.organization: list(team1members)
1909+
'/organizations/14143/team/1/members': list(team1members)
18981910
})
18991911

19001912
# Send the update event
@@ -1933,16 +1945,18 @@ def test_016_hook_membership_event_remove_member(self):
19331945
'/orgs/%s/teams' % self.organization: [
19341946
{
19351947
"id": 1,
1948+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
19361949
"name": u"Justice League",
19371950
"slug": u"justice-league"
19381951
},
19391952
],
1940-
'/organizations/%s/team/1/members' % self.organization: list(team1members)
1953+
'/organizations/14143/team/1/members': list(team1members)
19411954
})
19421955

19431956
update = {
19441957
"team": {
19451958
"id": 1,
1959+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
19461960
"name": u"Justice League",
19471961
"slug": u"justice-league"
19481962
}
@@ -1955,11 +1969,12 @@ def test_016_hook_membership_event_remove_member(self):
19551969
'/orgs/%s/teams' % self.organization: [
19561970
{
19571971
"id": 1,
1972+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
19581973
"name": u"Justice League",
19591974
"slug": u"justice-league"
19601975
},
19611976
],
1962-
'/organizations/%s/team/1/members' % self.organization: list(team1members)
1977+
'/organizations/14143/team/1/members': list(team1members)
19631978
})
19641979

19651980
# Send the update event
@@ -2072,6 +2087,7 @@ def test_021_hook_membership_event_api_failure(self):
20722087
update = {
20732088
"team": {
20742089
"id": 1,
2090+
"url": u"%sorganizations/14143/team/1" % self.tracd_env_debug.get('TRAC_GITHUB_API_URL'),
20752091
"name": u"Justice League",
20762092
"deleted": True
20772093
}

tracext/github/__init__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -464,23 +464,23 @@ class GitHubTeam(GitHubUserCollection):
464464
get a list of GitHub login names that are part of this group. To access the
465465
full name of this team, use the `fullname()` method.
466466
"""
467-
def __init__(self, api, env, org, teamid, slug): # pylint: disable=too-many-arguments
467+
def __init__(self, api, env, org, url, slug): # pylint: disable=too-many-arguments
468468
"""
469469
Create a new team.
470470
471471
:param api: the `GitHubGroupsProvider` providing API access
472472
:param env: the `TracEnvironment` context used to cache results
473473
:param org: the name of the organization of the team
474-
:param teamid: the GitHub team ID of the team
474+
:param url: the GitHub API URL of the team
475475
:param slug: the GitHub team shortname in URL representation
476476
"""
477-
self._teamid = teamid
477+
self._url = url
478478
self._orgid = org
479479
fullname = '-'.join(['github', org, slug])
480480
super(GitHubTeam, self).__init__(api, env, fullname)
481481

482482
def _apicall_parameters(self):
483-
return ("organizations/{}/team/{}/members", self._orgid, self._teamid)
483+
return ("{}/members", self._url)
484484

485485
#class GitHubOrgMembers(GitHubUserCollection):
486486
# """
@@ -527,7 +527,8 @@ def _apicall_parameters(self):
527527
return ("orgs/{}/teams", self._org)
528528

529529
def _apiresult_postprocess(self, json_obj):
530-
return {team['slug']: team['id'] for team in json_obj}
530+
github_api_url = os.environ.get("TRAC_GITHUB_API_URL", "https://api.github.com/").rstrip('/') + '/'
531+
return {team['slug']: team['url'][len(github_api_url):] for team in json_obj}
531532

532533
def _apiresult_error(self):
533534
return {}

0 commit comments

Comments
 (0)