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
|
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from mock import Mock, patch
from unittest import TestCase
from github3 import api
from github3.handlers.base import Handler
from github3.exceptions import *
from github3.converters import *
from github3.models.user import User
from fixtures import *
import json
import requests
class TestHandler(TestCase):
def setUp(self):
self.gh = api.Github()
self.handler = Handler(self.gh)
def test_get_converter(self):
self.assertIsInstance(self.handler._get_converter(), Modelizer)
self.assertIsInstance(self.handler._get_converter(converter=Rawlizer),
Rawlizer)
self.handler.converter = Modelizer
self.assertIsInstance(self.handler._get_converter(), Modelizer)
def test_bool(self):
with patch.object(api.Github, 'head') as head:
response = head.return_value
response.status_code = 204
bool1 = self.handler._bool('test')
head.side_effect = NotFound()
bool2 = self.handler._bool('test')
head.assert_called_with('test')
self.assertTrue(bool1)
self.assertFalse(bool2)
with patch.object(api.Github, 'put') as put:
response = put.return_value
response.status_code = 204
booll = self.handler._put('test')
put.assert_called_with('test', method='put')
self.assertTrue(booll)
with patch.object(api.Github, 'delete') as delete:
response = delete.return_value
response.content = self.gh._parser.dumps({'data': 'test'})
response.status_code = 204
bool1 = self.handler._bool('test', method='delete')
bool2 = self.handler._bool('test', method='delete',
data={'some': 'data'})
self.assertTrue(bool1)
self.assertTrue(bool2)
@patch.object(api.Github, '_request')
def test_get_resources(self, request):
# Simulating per_page=2 with STUB (it returns two resources)
response = request.return_value
response.status_code = 200
response.headers = {'link': GET_LINK}
response.content = self.gh._parser.dumps(GET_RESOURCES)
resources = self.handler._get_resources('users', model=User)
self.assertFalse(request.called)
resources = list(resources)
self.assertTrue(request.call_count, 5)
request_args = ('GET', 'users')
self.assertEquals(request.call_args_list, [
(request_args, {'page': 1}),
(request_args, {'page': 2}),
(request_args, {'page': 3}),
(request_args, {'page': 4}),
(request_args, {'page': 5})])
self.assertEquals(len(resources), 10)
self.assertEquals(resources[0].login, 'octocat')
request.reset_mock()
resources = self.handler._get_resources('users', model=User, limit=5)
resources = list(resources)
self.assertEquals(request.call_count, 3)
self.assertEquals(len(resources), 5)
request.reset_mock()
resources = self.handler._get_resources('users', model=User, limit=4)
resources = list(resources)
self.assertEquals(request.call_count, 2)
self.assertEquals(len(resources), 4)
request.reset_mock()
resources = self.handler._get_resources('users', model=User, limit=-5)
resources = list(resources)
self.assertEquals(request.call_count, 3)
self.assertEquals(len(resources), 5)
@patch.object(api.Github, 'get')
def test_get_resource(self, get):
# Converter test + api(get) test. Half trivial
get.return_value = {'login': 'octocat'}
model = self.handler._get_resource('test', model=User)
self.assertEquals(model.login, 'octocat')
@patch.object(api.Github, 'post')
def test_post_resource(self, post):
post.return_value = {'data': 'posted'}
data = {'data': 'to_post'}
user_new = self.handler._post_resource('test', data=data, model=User)
post.assert_called_with('test', data=data)
|