Skip to content

Commit 78752f5

Browse files
committed
Testing on fire (handlers, user_handler)
Also fix bugs, pep8
1 parent 1836ee6 commit 78752f5

File tree

7 files changed

+163
-8
lines changed

7 files changed

+163
-8
lines changed

github3/api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def patch(self, request, data=None, **kwargs):
7171

7272
def put(self, request, **kwargs):
7373
""" PUT request """
74+
# Content-length: 0 to headers ?
7475
response = self._request('PUT', request, **kwargs)
7576
assert response.status_code == 204
7677
return response

github3/exceptions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ class NotFound(Exception):
1111
pass
1212
class Unauthorized(Exception):
1313
pass
14+
class UserIsAnonymous(Exception):
15+
pass

github3/handlers/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ def __init__(self, gh):
1515

1616
def _prefix_resource(self, resource):
1717
prefix = getattr(self, 'prefix', '')
18-
return '/'.join((prefix, resource)).rstrip('/')
18+
return '/'.join((prefix, resource)).strip('/')
1919

2020
def _get_converter(self, **kwargs):
2121
converter = kwargs.get(
2222
'converter', # 1. in kwargs
2323
getattr(self, 'converter', # 2. in handler
24-
Modelizer())) # 3. Default
24+
Modelizer)) # 3. Default
2525

26-
return converter
26+
return converter()
2727

2828
def _put(self, resource, **kwargs):
2929
""" Put proxy request"""

github3/tests/fixtures.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
GET_USER = {
5+
"login": "octocat",
6+
"id": 1,
7+
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
8+
"url": "https://api.github.com/users/octocat",
9+
"name": "monalisa octocat",
10+
"company": "GitHub",
11+
"blog": "https://github.com/blog",
12+
"location": "San Francisco",
13+
"email": "octocat@github.com",
14+
"hireable": False,
15+
"bio": "There once was...",
16+
"public_repos": 2,
17+
"public_gists": 1,
18+
"followers": 20,
19+
"following": 0,
20+
"html_url": "https://github.com/octocat",
21+
"created_at": "2008-01-14T04:33:35Z",
22+
"type": "User"
23+
}
24+
25+
GET_LINK = '<https://api.github.com/gists/public?page=2>; rel="next", <https://api.github.com/gists/public?page=5>; rel="last"'
26+
27+
GET_FOLLOWERS = [
28+
{
29+
"login": "octocat",
30+
"id": 1,
31+
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
32+
"url": "https://api.github.com/users/octocat"
33+
},
34+
{
35+
"login": "octocat",
36+
"id": 1,
37+
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
38+
"url": "https://api.github.com/users/octocat"
39+
},
40+
]

github3/tests/get_handlers_test.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ def test_get_user(self):
1616
anom_user = self.anom_gh.users
1717
auth_user = self.auth_gh.users
1818

19-
self.assertEquals(isinstance(anom_user, handlers.users.User), True)
20-
self.assertEquals(isinstance(auth_user, handlers.users.AuthUser), True)
19+
self.assertIsInstance(anom_user, handlers.users.User)
20+
self.assertEquals(anom_user.prefix, 'users')
21+
self.assertIsInstance(auth_user, handlers.users.AuthUser)
22+
self.assertEquals(auth_user.prefix, 'user')
2123

2224
def test_get_gists(self):
2325
anom_gists = self.anom_gh.gists
2426
auth_gists = self.auth_gh.gists
2527

26-
self.assertEquals(isinstance(anom_gists, handlers.gists.Gist), True)
27-
self.assertEquals(
28-
isinstance(auth_gists, handlers.gists.AuthGist), True)
28+
self.assertIsInstance(anom_gists, handlers.gists.Gist)
29+
self.assertIsInstance(auth_gists, handlers.gists.AuthGist)

github3/tests/handler_test.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from mock import Mock, patch
5+
from unittest import TestCase
6+
from github3 import api
7+
from github3.handlers.base import Handler
8+
from github3.exceptions import *
9+
from github3.converters import *
10+
import json
11+
import requests
12+
13+
14+
class TestHandler(TestCase):
15+
16+
def setUp(self):
17+
self.gh = api.Github()
18+
self.handler = Handler(self.gh)
19+
20+
def test_get_converter(self):
21+
self.assertIsInstance(self.handler._get_converter(), Modelizer)
22+
self.assertIsInstance(self.handler._get_converter(converter=Rawlizer),
23+
Rawlizer)
24+
self.handler.converter = Modelizer
25+
self.assertIsInstance(self.handler._get_converter(), Modelizer)
26+
27+
def test_bool(self):
28+
with patch.object(api.Github, 'head') as head:
29+
response = head.return_value
30+
response.status_code = 204
31+
bool1 = self.handler._bool('test')
32+
head.side_effect = NotFound()
33+
bool2 = self.handler._bool('test')
34+
head.assert_called_with('test')
35+
self.assertTrue(bool1)
36+
self.assertFalse(bool2)
37+
38+
with patch.object(api.Github, 'put') as put:
39+
response = put.return_value
40+
response.status_code = 204
41+
booll = self.handler._put('test')
42+
put.assert_called_with('test', method='put')
43+
self.assertTrue(booll)
44+
45+
with patch.object(api.Github, 'delete') as delete:
46+
response = delete.return_value
47+
response.content = self.gh._parser.dumps({'data': 'test'})
48+
response.status_code = 204
49+
bool1 = self.handler._bool('test', method='delete')
50+
bool2 = self.handler._bool('test', method='delete',
51+
data={'some': 'data'})
52+
self.assertTrue(bool1)
53+
self.assertTrue(bool2)

github3/tests/user_handler_test.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from unittest import TestCase
5+
from mock import Mock, patch
6+
from github3 import api
7+
from fixtures import *
8+
from github3.models.user import User, AuthUser
9+
from github3.exceptions import *
10+
11+
12+
class TestUserHandler(TestCase):
13+
""" Test public api about users """
14+
15+
def setUp(self):
16+
self.gh = api.Github()
17+
self.handler = self.gh.users
18+
19+
def test_set_username(self):
20+
handler = self.handler.set_username('test')
21+
self.assertEquals(id(handler), id(self.handler))
22+
self.assertEquals(handler.username, 'test')
23+
model_user = Mock()
24+
model_user.login = 'test'
25+
handler = self.handler.set_username(model_user)
26+
self.assertEquals(handler.username, 'test')
27+
28+
def test_parse_user(self):
29+
model_user = Mock()
30+
model_user.login = 'test'
31+
self.assertRaises(UserIsAnonymous, self.handler._parse_user, None)
32+
user = self.handler._parse_user(model_user)
33+
self.assertEquals(user, 'test')
34+
user = self.handler._parse_user('test')
35+
self.assertEquals(user, 'test')
36+
self.assertRaises(UserIsAnonymous, self.handler._parse_user, Mock())
37+
self.handler.set_username('octocat')
38+
self.assertEquals('octocat', self.handler._parse_user(None))
39+
self.assertEquals('octocat', self.handler._parse_user(Mock()))
40+
self.assertEquals('test', self.handler._parse_user('test'))
41+
self.assertEquals('test', self.handler._parse_user(model_user))
42+
43+
@patch.object(api.Github, 'get')
44+
def test_get(self, get):
45+
get.return_value = GET_USER
46+
self.assertRaises(UserIsAnonymous, self.handler.get)
47+
user = self.handler.get('octocat')
48+
self.assertIsInstance(user, User)
49+
get.assert_called_with('users/octocat')
50+
51+
@patch.object(api.Github, '_request')
52+
def test_get_followers(self, request):
53+
response = request.return_value
54+
response.headers = {'link': GET_LINK} # 5 pages
55+
response.content = self.gh._parser.dumps(GET_FOLLOWERS)
56+
followers = list(self.handler.get_followers('test'))
57+
self.assertIsInstance(followers[0], User)
58+
pass

0 commit comments

Comments
 (0)