aboutsummaryrefslogtreecommitdiffstats
path: root/github3/tests/api_test.py
blob: 258a7373642fe80d8bbf9e30653f6e3b0a8c44ae (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
107
108
109
110
111
112
113
114
115
#!/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')