Skip to content

Commit 3ac7f81

Browse files
committed
Core tests
core.client core.result
1 parent de2c780 commit 3ac7f81

File tree

5 files changed

+212
-3
lines changed

5 files changed

+212
-3
lines changed

pygithub3/tests/core/__init__.py

Whitespace-only changes.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from unittest import TestCase
5+
6+
import requests
7+
from pygithub3.core.client import Client
8+
from pygithub3.exceptions import *
9+
from mock import patch
10+
11+
12+
class TestClient(TestCase):
13+
14+
def setUp(self):
15+
self.c = Client()
16+
17+
def test_set_credentials_with_valid(self):
18+
self.c.set_credentials('login', 'password')
19+
self.assertEqual(self.c.requester.auth, ('login', 'password'))
20+
21+
def test_set_credentials_with_invalid(self):
22+
self.c.set_credentials('', '')
23+
self.assertIsNone(self.c.requester.auth)
24+
25+
def test_set_token_with_valid(self):
26+
self.c.set_token('tokenize')
27+
self.assertEqual(self.c.requester.params['access_token'], 'tokenize')
28+
29+
def test_set_token_with_invalid(self):
30+
self.c.set_token('')
31+
self.assertIsNone(self.c.requester.params.get('access_token'))
32+
33+
def test_INIT_client_with_another_config_args(self):
34+
new_c = Client(base_url='url', per_page=10, user='me', repo='myrepo',
35+
verbose='stream')
36+
self.assertEqual(new_c.config['base_url'], 'url')
37+
self.assertEqual(new_c.requester.params['per_page'], 10)
38+
self.assertEqual(new_c.user, 'me')
39+
self.assertEqual(new_c.repo, 'myrepo')
40+
self.assertEqual(new_c.requester.config['verbose'], 'stream')
41+
42+
@patch.object(requests.sessions.Session, 'request')
43+
def test_PARSE_args_in_request_without_params(self, request_method):
44+
extra = dict(arg1='arg1', arg2='arg2')
45+
self.c.request('', '', data='data', **extra)
46+
request_method.assert_called_with('', self.c.config['base_url'],
47+
data='data', params=extra)
48+
49+
@patch.object(requests.sessions.Session, 'request')
50+
def test_PARSE_args_in_request_with_params(self, request_method):
51+
extra = dict(arg1='arg1', arg2='arg2')
52+
self.c.request('', '', params=dict(arg0='arg0'), **extra)
53+
request_method.assert_called_with('', self.c.config['base_url'],
54+
params=dict(arg0='arg0', **extra))
55+
56+
@patch.object(Client, 'request')
57+
def test_DELEGATES_methods(self, request_method):
58+
self.c.get('')
59+
request_method.assert_called_with('get', '')
60+
self.c.post('')
61+
request_method.assert_called_with('post', '')
62+
self.c.patch('')
63+
request_method.assert_called_with('patch', '')
64+
self.c.put('')
65+
request_method.assert_called_with('put', '')
66+
self.c.delete('')
67+
request_method.assert_called_with('delete', '')
68+
self.c.head('')
69+
request_method.assert_called_with('head', '')
70+
71+
72+
@patch.object(requests.sessions.Session, 'request')
73+
class TestClientRaises(TestCase):
74+
75+
def setUp(self):
76+
self.c = Client()
77+
self.callback = (self.c.request, 'method', 'request')
78+
79+
def test_raise_NotFound(self, request_method):
80+
request_method.return_value.status_code = 404
81+
self.assertRaises(NotFound, *self.callback)
82+
83+
def test_raise_BadRequest(self, request_method):
84+
request_method.return_value.status_code = 400
85+
self.assertRaises(BadRequest, *self.callback)
86+
87+
def test_raise_UnprocessableEntity(self, request_method):
88+
request_method.return_value.status_code = 422
89+
self.assertRaises(UnprocessableEntity, *self.callback)
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from unittest import TestCase
5+
6+
from mock import Mock
7+
8+
from pygithub3.core.client import Client
9+
from pygithub3.core.result import Result, Page
10+
from .utils import (mock_paginate_github_in_GET,
11+
mock_no_paginate_github_in_GET, request)
12+
13+
14+
class ResultInitMixin(object):
15+
16+
def setUp(self):
17+
self.c = Client()
18+
self.get_request = Mock(side_effect=self.mock)
19+
self.resource_loads = request.resource.loads
20+
self.c.get = self.get_request
21+
self.r = Result(self.c, request)
22+
23+
def tearDown(self):
24+
self.resource_loads.reset_mock() # It mocks class method
25+
26+
class TestResultWithPaginate(ResultInitMixin, TestCase):
27+
28+
@property
29+
def mock(self):
30+
return mock_paginate_github_in_GET
31+
32+
def test_iteration_CALLS(self):
33+
self.assertEqual(self.get_request.call_count, 0)
34+
self.assertEqual(self.resource_loads.call_count, 0)
35+
list(self.r)
36+
self.get_request.assert_called_once_with(request, page=1)
37+
38+
def test_consumed_are_Pages(self):
39+
pages_that_are_Pages = len(
40+
filter(lambda page: isinstance(page, Page), list(self.r)))
41+
self.assertEqual(pages_that_are_Pages, 3, 'There are not 3 Pages objs')
42+
self.assertEqual(self.resource_loads.call_count, 1)
43+
44+
def test_all_iteration_CALLS(self):
45+
self.r.all()
46+
self.assertEqual(self.get_request.call_count, 3)
47+
self.assertEqual(self.resource_loads.call_count, 3)
48+
49+
def test_CACHE_with_renew_iterations(self):
50+
self.r.all()
51+
self.r.all()
52+
self.assertEqual(self.get_request.call_count, 3)
53+
self.assertEqual(len(self.r.getter.cache), 3)
54+
self.assertEqual(self.resource_loads.call_count, 3)
55+
56+
def test_ITERATOR_calls(self):
57+
self.r.iterator()
58+
self.assertEqual(self.get_request.call_count, 0)
59+
self.assertEqual(self.resource_loads.call_count, 0)
60+
61+
62+
class TestResultWithoutPaginate(ResultInitMixin, TestCase):
63+
64+
@property
65+
def mock(self):
66+
return mock_no_paginate_github_in_GET
67+
68+
def test_iteration_stop_at_1(self):
69+
self.r.next()
70+
self.assertRaises(StopIteration, self.r.next)
71+
72+
def test_get_only_1page(self):
73+
self.r.all()
74+
self.assertEqual(self.get_request.call_count, 1)
75+
self.assertEqual(self.resource_loads.call_count, 1)

pygithub3/tests/core/utils.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from mock import Mock
5+
6+
from pygithub3.resources.base import Resource
7+
from pygithub3.requests import Request
8+
9+
10+
class DummyResource(Resource):
11+
pass
12+
13+
14+
def loads_mock(content):
15+
return content
16+
DummyResource.loads = Mock(side_effect=loads_mock)
17+
18+
19+
class DummyRequest(Request):
20+
uri = 'dummyrequest'
21+
resource = DummyResource
22+
23+
24+
request = DummyRequest({})
25+
# Working without json but name it json-related to not confuse
26+
json_content = [dict(name='dummy')]
27+
28+
29+
def mock_paginate_github_in_GET(request, page):
30+
def header(page):
31+
return {'link': '<https://d.com/d?page=%s>; rel="last"' % page}
32+
33+
def content(page):
34+
if page >= 3:
35+
return json_content
36+
return json_content * 2
37+
38+
response = Mock()
39+
response.headers = header(3)
40+
response.content = content(page)
41+
return response
42+
43+
44+
def mock_no_paginate_github_in_GET(request, page):
45+
response = Mock()
46+
response.headers = {}
47+
response.content = [json_content * 3]
48+
return response

pygithub3/tests/test_errors.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)