Skip to content

Commit 464722a

Browse files
committed
Repos collaborators added
1 parent ccbfd48 commit 464722a

File tree

3 files changed

+90
-2
lines changed

3 files changed

+90
-2
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from . import Request
5+
from pygithub3.resources.users import User
6+
7+
class List(Request):
8+
9+
uri = 'repos/{user}/{repo}/collaborators'
10+
resource = User
11+
12+
13+
class Is_collaborator(Request):
14+
15+
uri = 'repos/{user}/{repo}/collaborators/{collaborator}'
16+
17+
18+
class Add(Request):
19+
20+
uri = 'repos/{user}/{repo}/collaborators/{collaborator}'
21+
22+
23+
class Delete(Request):
24+
25+
uri = 'repos/{user}/{repo}/collaborators/{collaborator}'

pygithub3/services/repos.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,40 @@
44
from .base import Base
55

66

7+
class Collaborator(Base):
8+
9+
def list(self, user=None, repo=None):
10+
request = self.make_request('repos.collaborators.list',
11+
user=user or self.get_user(),
12+
repo=repo or self.get_repo())
13+
return self._get_result(request)
14+
15+
def add(self, collaborator, user=None, repo=None):
16+
request = self.make_request('repos.collaborators.add',
17+
collaborator=collaborator,
18+
user=user or self.get_user(),
19+
repo=repo or self.get_repo())
20+
return self._put(request)
21+
22+
def is_collaborator(self, collaborator, user=None, repo=None):
23+
request = self.make_request('repos.collaborators.is_collaborator',
24+
collaborator=collaborator,
25+
user=user or self.get_user(),
26+
repo=repo or self.get_repo())
27+
return self._bool(request)
28+
29+
def delete(self, collaborator, user=None, repo=None):
30+
request = self.make_request('repos.collaborators.delete',
31+
collaborator=collaborator,
32+
user=user or self.get_user(),
33+
repo=repo or self.get_repo())
34+
self._delete(request)
35+
36+
737
class Repo(Base):
838

939
def __init__(self, **config):
40+
self.collaborators = Collaborator(**config)
1041
super(Repo, self).__init__(**config)
1142

1243
def list(self, user=None, type='all'):

pygithub3/tests/services/test_repos.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import requests
77
from mock import patch, Mock
88

9-
from pygithub3.services.repos import Repo
9+
from pygithub3.services.repos import Repo, Collaborator
1010
from pygithub3.resources.base import json
1111
from pygithub3.tests.utils.base import mock_response, mock_response_result
1212
from pygithub3.tests.utils.services import _, mock_json
@@ -99,7 +99,7 @@ def test_UPDATE_with_repo_in_service(self, request_method):
9999
self.assertEqual(request_method.call_args[0],
100100
('patch', _('repos/octocat/octocat_repo')))
101101

102-
""" From here I stop to do '*in_args' and '*filter' tests, I consider
102+
""" From here I stop to do '*in_args' and '*filter' tests, I consider
103103
that I tested it enough... """
104104

105105
def test_LIST_contributors(self, request_method):
@@ -138,3 +138,35 @@ def test_LIST_branches(self, request_method):
138138
self.rs.list_branches().all()
139139
self.assertEqual(request_method.call_args[0],
140140
('get', _('repos/octocat/octocat_repo/branches')))
141+
142+
143+
@patch.object(requests.sessions.Session, 'request')
144+
class TestCollaboratorsService(TestCase):
145+
146+
def setUp(self):
147+
self.cs = Collaborator()
148+
self.cs.set_user('octocat')
149+
self.cs.set_repo('oc_repo')
150+
151+
def test_LIST(self, request_method):
152+
request_method.return_value = mock_response_result()
153+
self.cs.list().all()
154+
self.assertEqual(request_method.call_args[0],
155+
('get', _('repos/octocat/oc_repo/collaborators')))
156+
157+
def test_IS_colaborator(self, request_method):
158+
request_method.return_value = mock_response()
159+
self.cs.is_collaborator('user')
160+
self.assertEqual(request_method.call_args[0],
161+
('head', _('repos/octocat/oc_repo/collaborators/user')))
162+
163+
def test_ADD(self, request_method):
164+
self.cs.add('user')
165+
self.assertEqual(request_method.call_args[0],
166+
('put', _('repos/octocat/oc_repo/collaborators/user')))
167+
168+
def test_DELETE(self, request_method):
169+
request_method.return_value = mock_response('delete')
170+
self.cs.delete('user')
171+
self.assertEqual(request_method.call_args[0],
172+
('delete', _('repos/octocat/oc_repo/collaborators/user')))

0 commit comments

Comments
 (0)