aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pygithub3/requests/repos/collaborators.py25
-rw-r--r--pygithub3/services/repos.py31
-rw-r--r--pygithub3/tests/services/test_repos.py36
3 files changed, 90 insertions, 2 deletions
diff --git a/pygithub3/requests/repos/collaborators.py b/pygithub3/requests/repos/collaborators.py
new file mode 100644
index 0000000..c4b5f79
--- /dev/null
+++ b/pygithub3/requests/repos/collaborators.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request
+from pygithub3.resources.users import User
+
+class List(Request):
+
+ uri = 'repos/{user}/{repo}/collaborators'
+ resource = User
+
+
+class Is_collaborator(Request):
+
+ uri = 'repos/{user}/{repo}/collaborators/{collaborator}'
+
+
+class Add(Request):
+
+ uri = 'repos/{user}/{repo}/collaborators/{collaborator}'
+
+
+class Delete(Request):
+
+ uri = 'repos/{user}/{repo}/collaborators/{collaborator}'
diff --git a/pygithub3/services/repos.py b/pygithub3/services/repos.py
index 9b061d4..97294ae 100644
--- a/pygithub3/services/repos.py
+++ b/pygithub3/services/repos.py
@@ -4,9 +4,40 @@
from .base import Base
+class Collaborator(Base):
+
+ def list(self, user=None, repo=None):
+ request = self.make_request('repos.collaborators.list',
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._get_result(request)
+
+ def add(self, collaborator, user=None, repo=None):
+ request = self.make_request('repos.collaborators.add',
+ collaborator=collaborator,
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._put(request)
+
+ def is_collaborator(self, collaborator, user=None, repo=None):
+ request = self.make_request('repos.collaborators.is_collaborator',
+ collaborator=collaborator,
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ return self._bool(request)
+
+ def delete(self, collaborator, user=None, repo=None):
+ request = self.make_request('repos.collaborators.delete',
+ collaborator=collaborator,
+ user=user or self.get_user(),
+ repo=repo or self.get_repo())
+ self._delete(request)
+
+
class Repo(Base):
def __init__(self, **config):
+ self.collaborators = Collaborator(**config)
super(Repo, self).__init__(**config)
def list(self, user=None, type='all'):
diff --git a/pygithub3/tests/services/test_repos.py b/pygithub3/tests/services/test_repos.py
index af7c0b0..93dfd5c 100644
--- a/pygithub3/tests/services/test_repos.py
+++ b/pygithub3/tests/services/test_repos.py
@@ -6,7 +6,7 @@ from unittest import TestCase
import requests
from mock import patch, Mock
-from pygithub3.services.repos import Repo
+from pygithub3.services.repos import Repo, Collaborator
from pygithub3.resources.base import json
from pygithub3.tests.utils.base import mock_response, mock_response_result
from pygithub3.tests.utils.services import _, mock_json
@@ -99,7 +99,7 @@ class TestRepoService(TestCase):
self.assertEqual(request_method.call_args[0],
('patch', _('repos/octocat/octocat_repo')))
- """ From here I stop to do '*in_args' and '*filter' tests, I consider
+ """ From here I stop to do '*in_args' and '*filter' tests, I consider
that I tested it enough... """
def test_LIST_contributors(self, request_method):
@@ -138,3 +138,35 @@ class TestRepoService(TestCase):
self.rs.list_branches().all()
self.assertEqual(request_method.call_args[0],
('get', _('repos/octocat/octocat_repo/branches')))
+
+
+@patch.object(requests.sessions.Session, 'request')
+class TestCollaboratorsService(TestCase):
+
+ def setUp(self):
+ self.cs = Collaborator()
+ self.cs.set_user('octocat')
+ self.cs.set_repo('oc_repo')
+
+ def test_LIST(self, request_method):
+ request_method.return_value = mock_response_result()
+ self.cs.list().all()
+ self.assertEqual(request_method.call_args[0],
+ ('get', _('repos/octocat/oc_repo/collaborators')))
+
+ def test_IS_colaborator(self, request_method):
+ request_method.return_value = mock_response()
+ self.cs.is_collaborator('user')
+ self.assertEqual(request_method.call_args[0],
+ ('head', _('repos/octocat/oc_repo/collaborators/user')))
+
+ def test_ADD(self, request_method):
+ self.cs.add('user')
+ self.assertEqual(request_method.call_args[0],
+ ('put', _('repos/octocat/oc_repo/collaborators/user')))
+
+ def test_DELETE(self, request_method):
+ request_method.return_value = mock_response('delete')
+ self.cs.delete('user')
+ self.assertEqual(request_method.call_args[0],
+ ('delete', _('repos/octocat/oc_repo/collaborators/user')))