diff options
Diffstat (limited to 'github3')
-rw-r--r-- | github3/handlers/users.py | 37 | ||||
-rw-r--r-- | github3/tests/user_handler_test.py | 51 |
2 files changed, 80 insertions, 8 deletions
diff --git a/github3/handlers/users.py b/github3/handlers/users.py index 4a181c8..ec40f02 100644 --- a/github3/handlers/users.py +++ b/github3/handlers/users.py @@ -108,17 +108,35 @@ class User(Handler): limit=limit) -class AuthUser(User): +class AuthUser(Handler): """ User handler with public and private access """ prefix = 'user' + def __init__(self, gh): + super(AuthUser, self).__init__(gh) + self._inject_handler(User(gh), prefix='get') + def __repr__(self): return '<AuthUser handler> %s>' % self._gh.session.auth[0] - def get(self): + def me(self): + """ Return authenticated user """ + return self._get_resource('', model=models.AuthUser) + def my_followers(self, limit=None): + """ Return authenticated user followers """ + + return self._get_resources('followers', model=models.User, + limit=limit) + + def my_following(self, limit=None): + """ Return authenticated user following """ + + return self._get_resources('following', model=models.User, + limit=limit) + def get_emails(self): """ Return list of emails """ @@ -220,7 +238,7 @@ class AuthUser(User): parse_key_id = getattr(key, 'id', key) return self._delete('keys/%s' % parse_key_id) - def get_repos(self, filter='all', limit=None): + def my_repos(self, filter='all', limit=None): """ Return user's public repositories @@ -230,6 +248,12 @@ class AuthUser(User): return self._get_resources('repos', model=models.Repo, limit=limit, type=str(filter)) + def my_watched(self, limit=None): + """ Return authenticated user repos that he watch """ + + return self._get_resources('watched', model=models.Repo, + limit=limit) + def is_watching_repo(self, owner, repo): """ Return true if you are watching the user repository @@ -266,3 +290,10 @@ class AuthUser(User): owner = getattr(owner, 'login', owner) repo = getattr(repo, 'name', repo) return self._delete('watched/%s/%s' % (owner, repo)) + + def my_orgs(self, limit=None): + """ List public and private organizations + for the authenticated user + """ + + return self._get_resources('orgs', model=models.Org, limit=limit) diff --git a/github3/tests/user_handler_test.py b/github3/tests/user_handler_test.py index 28fda3b..33658d2 100644 --- a/github3/tests/user_handler_test.py +++ b/github3/tests/user_handler_test.py @@ -7,6 +7,7 @@ from github3 import api from fixtures import * from github3.models import User, AuthUser, Repo, Gist, Org, Key from github3.exceptions import * +from github3 import handlers class TestAuthUserHandler(TestCase): @@ -18,14 +19,54 @@ class TestAuthUserHandler(TestCase): self.user_mock = Mock() self.user_mock.login = 'user_model' + def test_inject_user_handler(self): + self.assertEquals(self.handler.get.im_class, handlers.users.User) + self.assertEquals(self.handler.get_followers.im_class, + handlers.users.User) + self.assertEquals(self.handler.get_following.im_class, + handlers.users.User) + self.assertEquals(self.handler.get_repos.im_class, + handlers.users.User) + self.assertEquals(self.handler.get_watched.im_class, + handlers.users.User) + self.assertEquals(self.handler.get_orgs.im_class, + handlers.users.User) + self.assertEquals(self.handler.get_gists.im_class, + handlers.users.User) + @patch.object(api.Github, 'get') - def test_get(self, get): + def test_me(self, get): get.return_value = GET_FULL_USER - user = self.handler.get() + user = self.handler.me() self.assertIsInstance(user, AuthUser) get.assert_called_with('user') self.assertEquals(len(user), len(GET_FULL_USER)) + @patch.object(handlers.base.Handler, '_get_resource') + def test_get(self, get): + user = self.handler.get('test') + get.assert_called_with('test', model=User) + + @patch.object(handlers.base.Handler, '_get_resources') + def test_get_my_followers(self, get): + followers = self.handler.my_followers() + get.assert_called_with('followers', model=User, limit=None) + + @patch.object(handlers.base.Handler, '_get_resources') + def test_get_my_following(self, get): + following = self.handler.my_following() + get.assert_called_with('following', model=User, limit=None) + + @patch.object(handlers.base.Handler, '_get_resources') + def test_get_my_watched(self, get): + following = self.handler.my_watched() + get.assert_called_with('watched', model=Repo, limit=None) + + @patch.object(handlers.base.Handler, '_get_resources') + def test_get_my_orgs(self, get): + following = self.handler.my_orgs() + get.assert_called_with('orgs', model=Org, limit=None) + @patch.object(api.Github, 'get') def test_get_emails(self, get): get.return_value = GET_USER_EMAILS @@ -117,17 +158,17 @@ class TestAuthUserHandler(TestCase): delete.assert_called_with('user/keys/1', method='delete') @patch.object(api.Github, '_request') - def test_get_repos(self, request): + def test_my_repos(self, request): response = request.return_value response.status_code = 200 response.content = self.gh._parser.dumps(GET_SHORT_REPOS) response.headers = {'link': GET_LINK} # 1 per page - repos = list(self.handler.get_repos(filter='public')) + repos = list(self.handler.my_repos(filter='public')) self.assertEquals(len(repos), 5) self.assertIsInstance(repos[0], Repo) request.assert_called_with('GET', 'user/repos', page=5, type='public') - repos = list(self.handler.get_repos(limit=2)) + repos = list(self.handler.my_repos(limit=2)) self.assertEquals(len(repos), 2) @patch.object(api.Github, 'head') |