1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from mock import Mock, patch
from unittest import TestCase
from github3 import api
from github3.exceptions import *
import json
import requests
@patch.object(requests.sessions.Session, 'request')
class TestGithubCore(TestCase):
def setUp(self):
self.gh = api.GithubCore()
self.assertEquals(self.gh.base_url, 'https://api.github.com/')
self.assertEquals(self.gh._parser, json)
self.base_url = self.gh.base_url
self.parser = self.gh._parser
def test_parse_args(self, request_method):
args = {
'data': {'some': 'data'},
'params': {'arg0': 'some'},
'headers': 'out',
'auth': 'out',
'arg1': 'some',
'arg2': 'some',
'arg3': {'some': 'data', 'are': {'nested': 'true'}},
}
self.gh._parse_args(args)
self.assertEquals(args, {
'data': {'some': 'data'},
'params': {'arg0': 'some', 'arg1': 'some', 'arg2': 'some',
'arg3': {'some': 'data', 'are': {'nested': 'true'}}},
'headers': 'out',
'auth': 'out',
})
def test_raise_errors(self, request_method):
real_request = (self.gh._request, 'GET', 'test')
request_method.return_value.status_code = 404
self.assertRaises(NotFound, *real_request)
request_method.return_value.status_code = 400
self.assertRaises(BadRequest, *real_request)
request_method.return_value.status_code = 422
self.assertRaises(UnprocessableEntity, *real_request)
request_method.return_value.status_code = 401
self.assertRaises(Unauthorized, *real_request)
def test_get(self, request_method):
response = request_method.return_value
response.content = self.parser.dumps({'test': 'test'})
content = self.gh.get('core')
request_method.assert_called_with('GET', self.base_url + 'core')
self.assertEquals(content, {'test': 'test'})
response = request_method.return_value
response.headers = {'link': 'url_with_links'}
response.content = self.parser.dumps({'test': 'test'})
header, content = self.gh.get('core', paginate=True)
request_method.assert_called_with('GET', self.base_url + 'core')
self.assertEquals(header, 'url_with_links')
self.assertEquals(content, {'test': 'test'})
def test_head(self, request_method):
pass # It has no sense using mocks
def test_post_and_patch(self, request_method):
data = {'login': 'test', 'bio': 'test'}
response = request_method.return_value
response.status_code = 201
response.content = self.parser.dumps({'post': 'done'})
content = self.gh.post('core', data=data)
request_method.assert_called_with(
'POST', self.base_url + 'core',
data=self.parser.dumps(data))
self.assertEquals(content, {'post': 'done'})
content = self.gh.post('core')
request_method.assert_called_with(
'POST', self.base_url + 'core',
data=self.parser.dumps(None))
self.assertEquals(content, {'post': 'done'})
response.status_code = 200
content = self.gh.patch('core', data=data)
request_method.assert_called_with(
'PATCH', self.base_url + 'core',
data=self.parser.dumps(data))
self.assertEquals(content, {'post': 'done'})
content = self.gh.patch('core')
request_method.assert_called_with(
'PATCH', self.base_url + 'core',
data=self.parser.dumps(None))
self.assertEquals(content, {'post': 'done'})
def test_delete(self, request_method):
data = {'test': 'test'}
response = request_method.return_value
response.status_code = 204
response.content = self.parser.dumps({'delete': 'done'})
delete = self.gh.delete('core', data=data)
request_method.assert_called_with(
'DELETE', self.base_url + 'core',
data=self.parser.dumps(data))
delete = self.gh.delete('core')
request_method.assert_called_with(
'DELETE', self.base_url + 'core')
def test_put(self, request_method):
response = request_method.return_value
response.status_code = 204
response.content = ''
put = self.gh.put('core')
request_method.assert_called_with(
'PUT', self.base_url + 'core',
headers={'Content-length': '0'})
|