aboutsummaryrefslogtreecommitdiffstats
path: root/github3/tests/handler_test.py
blob: e691182b6df23fb861e01eb601d7df16ad7730a8 (plain) (blame)
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)