aboutsummaryrefslogtreecommitdiffstats
path: root/github3/tests/user_handler_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'github3/tests/user_handler_test.py')
-rw-r--r--github3/tests/user_handler_test.py326
1 files changed, 326 insertions, 0 deletions
diff --git a/github3/tests/user_handler_test.py b/github3/tests/user_handler_test.py
new file mode 100644
index 0000000..33658d2
--- /dev/null
+++ b/github3/tests/user_handler_test.py
@@ -0,0 +1,326 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from unittest import TestCase
+from mock import Mock, patch
+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):
+ """ Test private api about user logged """
+
+ def setUp(self):
+ self.gh = api.Github('test', 'pass')
+ self.handler = self.gh.users
+ 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_me(self, get):
+ get.return_value = GET_FULL_USER
+ 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
+ emails = self.handler.get_emails()
+ get.assert_called_with('user/emails')
+ self.assertEquals(emails, GET_USER_EMAILS)
+
+ @patch.object(api.Github, 'post')
+ def test_create_emails(self, post):
+ post.return_value = GET_USER_EMAILS
+ emails = self.handler.create_emails(*GET_USER_EMAILS)
+ post.assert_called_with('user/emails', data=GET_USER_EMAILS)
+ self.assertEquals(emails, GET_USER_EMAILS)
+
+ @patch.object(api.Github, 'delete')
+ def test_delete_emails(self, delete):
+ response = delete.return_value
+ response.return_value = ''
+ response.status_code = 204
+ emails = self.handler.delete_emails(*GET_USER_EMAILS)
+ delete.assert_called_with('user/emails', data=GET_USER_EMAILS,
+ method='delete')
+ self.assertTrue(emails)
+
+ @patch.object(api.Github, 'head')
+ def test_is_following(self, head):
+ response = head.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.is_following('test'))
+ head.assert_called_with('user/following/test')
+ self.handler.is_following(self.user_mock)
+ head.assert_called_with('user/following/user_model')
+
+ @patch.object(api.Github, 'put')
+ def test_follow(self, put):
+ response = put.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.follow('test'))
+ put.assert_called_with('user/following/test', method='put')
+
+ @patch.object(api.Github, 'delete')
+ def test_unfollow(self, delete):
+ response = delete.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.unfollow('test'))
+ delete.assert_called_with('user/following/test', method='delete')
+
+ @patch.object(api.Github, '_request')
+ def test_get_keys(self, request):
+ response = request.return_value
+ response.status_code = 200
+ response.content = self.gh._parser.dumps(GET_USER_KEYS)
+ response.headers = {'link': GET_LINK} # 1 per page
+ keys = list(self.handler.get_keys())
+ self.assertEquals(len(keys), 5)
+ self.assertIsInstance(keys[0], Key)
+ request.assert_called_with('GET', 'user/keys', page=5)
+ keys = list(self.handler.get_keys(limit=2))
+ self.assertEquals(len(keys), 2)
+
+ @patch.object(api.Github, 'get')
+ def test_get_key(self, get):
+ get.return_value = GET_USER_KEYS[0]
+ key = self.handler.get_key(1)
+ self.assertIsInstance(key, Key)
+ get.assert_called_with('user/keys/1')
+ model_key = Mock()
+ model_key.id = 1
+ key = self.handler.get_key(model_key)
+ get.assert_called_with('user/keys/1')
+
+ @patch.object(api.Github, 'post')
+ def test_create_key(self, post):
+ post.return_value = GET_USER_KEYS[0]
+ key_data = {'title': 'some', 'key': 'ssh-rsa AAA'}
+ created_key = self.handler.create_key(**key_data)
+ self.assertIsInstance(created_key, Key)
+ post.assert_called_with('user/keys', data=key_data)
+
+ @patch.object(api.Github, 'delete')
+ def test_delete_key(self, delete):
+ response = delete.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.delete_key(1))
+ delete.assert_called_with('user/keys/1', method='delete')
+ model_key = Mock()
+ model_key.id = 1
+ key = self.handler.delete_key(model_key)
+ delete.assert_called_with('user/keys/1', method='delete')
+
+ @patch.object(api.Github, '_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.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.my_repos(limit=2))
+ self.assertEquals(len(repos), 2)
+
+ @patch.object(api.Github, 'head')
+ def test_is_watching_repo(self, head):
+ response = head.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.is_watching_repo('user', 'repo'))
+ head.assert_called_with('user/watched/user/repo')
+ model_user, model_repo = Mock(), Mock()
+ model_user.login = 'user'
+ model_repo.name = 'repo'
+ self.assertTrue(self.handler.is_watching_repo('user', 'repo'))
+ head.assert_called_with('user/watched/user/repo')
+
+ @patch.object(api.Github, 'put')
+ def test_watch_repo(self, put):
+ response = put.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.watch_repo('user', 'repo'))
+ put.assert_called_with('user/watched/user/repo', method='put')
+ model_user, model_repo = Mock(), Mock()
+ model_user.login = 'user'
+ model_repo.name = 'repo'
+ self.assertTrue(self.handler.watch_repo('user', 'repo'))
+ put.assert_called_with('user/watched/user/repo', method='put')
+
+ @patch.object(api.Github, 'delete')
+ def test_unwatch_repo(self, delete):
+ response = delete.return_value
+ response.status_code = 204
+ self.assertTrue(self.handler.unwatch_repo('user', 'repo'))
+ delete.assert_called_with('user/watched/user/repo', method='delete')
+ model_user, model_repo = Mock(), Mock()
+ model_user.login = 'user'
+ model_repo.name = 'repo'
+ self.assertTrue(self.handler.unwatch_repo('user', 'repo'))
+ delete.assert_called_with('user/watched/user/repo', method='delete')
+
+
+class TestUserHandler(TestCase):
+ """ Test public api about users """
+
+ def setUp(self):
+ self.gh = api.Github()
+ self.handler = self.gh.users
+
+ def test_set_username(self):
+ handler = self.handler.set_username('test')
+ self.assertEquals(id(handler), id(self.handler))
+ self.assertEquals(handler.username, 'test')
+ model_user = Mock()
+ model_user.login = 'test'
+ handler = self.handler.set_username(model_user)
+ self.assertEquals(handler.username, 'test')
+
+ def test_parse_user(self):
+ model_user = Mock()
+ model_user.login = 'test'
+ self.assertRaises(UserIsAnonymous, self.handler._parse_user, None)
+ user = self.handler._parse_user(model_user)
+ self.assertEquals(user, 'test')
+ user = self.handler._parse_user('test')
+ self.assertEquals(user, 'test')
+ self.assertRaises(UserIsAnonymous, self.handler._parse_user, Mock())
+ self.handler.set_username('octocat')
+ self.assertEquals('octocat', self.handler._parse_user(None))
+ self.assertEquals('octocat', self.handler._parse_user(Mock()))
+ self.assertEquals('test', self.handler._parse_user('test'))
+ self.assertEquals('test', self.handler._parse_user(model_user))
+
+ @patch.object(api.Github, 'get')
+ def test_get(self, get):
+ get.return_value = GET_USER
+ self.assertRaises(UserIsAnonymous, self.handler.get)
+ user = self.handler.get('octocat')
+ self.assertIsInstance(user, User)
+ get.assert_called_with('users/octocat')
+
+ @patch.object(api.Github, '_request')
+ def test_get_followers(self, request):
+ response = request.return_value
+ response.headers = {'link': GET_LINK}
+ response.content = self.gh._parser.dumps(GET_SHORT_USERS) # 2 users
+ followers = list(self.handler.get_followers('test'))
+ request.assert_called_with('GET', 'users/test/followers', page=5)
+ self.assertIsInstance(followers[0], User)
+ self.assertEquals(len(followers), 10)
+ followers = list(self.handler.get_followers('test', limit=2))
+ self.assertEquals(len(followers), 2)
+ self.assertEquals(followers[0].login, 'octocat')
+
+ @patch.object(api.Github, '_request')
+ def test_get_following(self, request):
+ response = request.return_value
+ response.headers = {'link': GET_LINK}
+ response.content = self.gh._parser.dumps(GET_SHORT_USERS) # 2 users
+ following = list(self.handler.get_following('test'))
+ request.assert_called_with('GET', 'users/test/following', page=5)
+ self.assertIsInstance(following[0], User)
+ self.assertEquals(len(following), 10)
+ following = list(self.handler.get_following('test', limit=2))
+ self.assertEquals(len(following), 2)
+
+ @patch.object(api.Github, '_request')
+ def test_get_repos(self, request):
+ response = request.return_value
+ response.headers = {'link': GET_LINK}
+ response.content = self.gh._parser.dumps(GET_SHORT_REPOS) # 1 repo
+ repos = list(self.handler.get_repos('test'))
+ request.assert_called_with('GET', 'users/test/repos', page=5)
+ self.assertIsInstance(repos[0], Repo)
+ self.assertEquals(len(repos), 5)
+ repos = list(self.handler.get_repos('test', limit=2))
+ self.assertEquals(len(repos), 2)
+ self.assertIsInstance(repos[0].owner, User)
+
+ @patch.object(api.Github, '_request')
+ def test_get_watched(self, request):
+ response = request.return_value
+ response.headers = {'link': GET_LINK}
+ response.content = self.gh._parser.dumps(GET_SHORT_REPOS) # 1 repo
+ watched = list(self.handler.get_watched('test'))
+ request.assert_called_with('GET', 'users/test/watched', page=5)
+ self.assertIsInstance(watched[0], Repo)
+ self.assertEquals(len(watched), 5)
+ watched = list(self.handler.get_watched('test', limit=2))
+ self.assertEquals(len(watched), 2)
+
+ @patch.object(api.Github, '_request')
+ def test_get_orgs(self, request):
+ response = request.return_value
+ response.headers = {'link': GET_LINK}
+ response.content = self.gh._parser.dumps(GET_SHORT_ORGS) # 1 repo
+ orgs = list(self.handler.get_orgs('test'))
+ request.assert_called_with('GET', 'users/test/orgs', page=5)
+ self.assertIsInstance(orgs[0], Org)
+ self.assertEquals(len(orgs), 5)
+ orgs = list(self.handler.get_orgs('test', limit=2))
+ self.assertEquals(len(orgs), 2)
+ self.assertEquals(orgs[0].login, 'github')
+
+ @patch.object(api.Github, '_request')
+ def test_get_gists(self, request):
+ response = request.return_value
+ response.headers = {'link': GET_LINK}
+ response.content = self.gh._parser.dumps(GET_SHORT_GISTS) # 1 repo
+ gists = list(self.handler.get_gists('test'))
+ request.assert_called_with('GET', 'users/test/gists', page=5)
+ self.assertIsInstance(gists[0], Gist)
+ self.assertEquals(len(gists), 5)
+ gists = list(self.handler.get_gists('test', limit=2))
+ self.assertEquals(len(gists), 2)
+ self.assertIsInstance(gists[0].files, dict)
+ from github3.models.gists import File
+ self.assertIsInstance(gists[0].files['ring.erl'], File)