diff options
Diffstat (limited to 'pygithub3')
-rw-r--r-- | pygithub3/requests/repos/watchers.py | 37 | ||||
-rw-r--r-- | pygithub3/services/repos.py | 28 | ||||
-rw-r--r-- | pygithub3/tests/services/test_repos.py | 45 |
3 files changed, 109 insertions, 1 deletions
diff --git a/pygithub3/requests/repos/watchers.py b/pygithub3/requests/repos/watchers.py new file mode 100644 index 0000000..46e01d7 --- /dev/null +++ b/pygithub3/requests/repos/watchers.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Request +from pygithub3.resources.users import User +from pygithub3.resources.repos import Repo + + +class List(Request): + + uri = 'repos/{user}/{repo}/watchers' + resource = User + + +class List_repos(Request): + + uri = 'users/{user}/watched' + resource = Repo + + def clean_uri(self): + if not self.user: + return 'user/watched' + + +class Is_watching(Request): + + uri = 'user/watched/{user}/{repo}' + + +class Watch(Request): + + uri = 'user/watched/{user}/{repo}' + + +class Unwatch(Request): + + uri = 'user/watched/{user}/{repo}' diff --git a/pygithub3/services/repos.py b/pygithub3/services/repos.py index c37f21e..b20d317 100644 --- a/pygithub3/services/repos.py +++ b/pygithub3/services/repos.py @@ -6,6 +6,33 @@ import requests from .base import Service, MimeTypeMixin +class Watchers(Service): + + def list(self, user=None, repo=None): + request = self.make_request('repos.watchers.list', + user=user, repo=repo) + return self._get_result(request) + + def list_repos(self, user=None): + request = self.make_request('repos.watchers.list_repos', user=user) + return self._get_result(request) + + def is_watching(self, user=None, repo=None): + request = self.make_request('repos.watchers.is_watching', + user=user, repo=repo) + return self._bool(request) + + def watch(self, user=None, repo=None): + request = self.make_request('repos.watchers.watch', + user=user, repo=repo) + self._put(request) + + def unwatch(self, user=None, repo=None): + request = self.make_request('repos.watchers.unwatch', + user=user, repo=repo) + self._delete(request) + + class Keys(Service): def list(self, user=None, repo=None): @@ -152,6 +179,7 @@ class Repo(Service): self.downloads = Downloads(**config) self.forks = Forks(**config) self.keys = Keys(**config) + self.watchers = Watchers(**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 cc8c286..6f4ed71 100644 --- a/pygithub3/tests/services/test_repos.py +++ b/pygithub3/tests/services/test_repos.py @@ -7,7 +7,7 @@ import requests from mock import patch, Mock from pygithub3.services.repos import (Repo, Collaborator, Commits, Downloads, - Forks, Keys) + Forks, Keys, Watchers) from pygithub3.resources.base import json from pygithub3.tests.utils.base import (mock_response, mock_response_result, mock_json) @@ -325,3 +325,46 @@ class TestKeysService(TestCase): self.ks.delete(1) self.assertEqual(request_method.call_args[0], ('delete', _('repos/oct/re_oct/keys/1'))) + + +@patch.object(requests.sessions.Session, 'request') +class TestWatchersService(TestCase): + + def setUp(self): + self.ws = Watchers(user='oct', repo='re_oct') + + def test_LIST(self, request_method): + request_method.return_value = mock_response_result() + self.ws.list().all() + self.assertEqual(request_method.call_args[0], + ('get', _('repos/oct/re_oct/watchers'))) + + def test_LIST_repos(self, request_method): + request_method.return_value = mock_response_result() + self.ws.list_repos().all() + self.assertEqual(request_method.call_args[0], + ('get', _('users/oct/watched'))) + + def test_LIST_repos_without_user(self, request_method): + request_method.return_value = mock_response_result() + self.ws.set_user(None) + self.ws.list_repos().all() + self.assertEqual(request_method.call_args[0], + ('get', _('user/watched'))) + + def test_IS_watching(self, request_method): + request_method.return_value = mock_response() + self.assertTrue(self.ws.is_watching()) + self.assertEqual(request_method.call_args[0], + ('head', _('user/watched/oct/re_oct'))) + + def test_WATCH(self, request_method): + self.ws.watch() + self.assertEqual(request_method.call_args[0], + ('put', _('user/watched/oct/re_oct'))) + + def test_UNWATCH(self, request_method): + request_method.return_value = mock_response('delete') + self.ws.unwatch() + self.assertEqual(request_method.call_args[0], + ('delete', _('user/watched/oct/re_oct'))) |