aboutsummaryrefslogtreecommitdiffstats
path: root/github3/tests/handler_test.py
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2011-12-03 20:07:07 +0100
committerDavid Medina <davidmedina9@gmail.com>2011-12-03 20:07:07 +0100
commitc1dad1ab5856e7e559cc2b2eaa7c8acb231981d1 (patch)
treef760a889eada0fe0d8cf8cadd8c19fa42c9b783b /github3/tests/handler_test.py
parentFix bugs (diff)
parentComplete AuthGist handler (diff)
downloadpython-github3-c1dad1ab5856e7e559cc2b2eaa7c8acb231981d1.tar.xz
python-github3-c1dad1ab5856e7e559cc2b2eaa7c8acb231981d1.zip
Merge branch 'develop'
Diffstat (limited to 'github3/tests/handler_test.py')
-rw-r--r--github3/tests/handler_test.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/github3/tests/handler_test.py b/github3/tests/handler_test.py
new file mode 100644
index 0000000..83c89ef
--- /dev/null
+++ b/github3/tests/handler_test.py
@@ -0,0 +1,133 @@
+#!/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, MimeTypeMixin
+from github3.exceptions import *
+from github3.converters import *
+from github3.models.user import User
+from fixtures import *
+import json
+import requests
+
+
+class TestMimeTypeMixin(TestCase):
+
+ def setUp(self):
+ self.mixin = MimeTypeMixin()
+
+ def _parse_mime_type(self, type):
+ return 'application/vnd.github.%s.%s+json' % (
+ MimeTypeMixin.VERSION, type)
+
+ def test_header(self):
+ self.assertEquals(self.mixin.mime_header(), None)
+
+ def test_add_mimetypes(self):
+ self.mixin.add_raw()
+ self.mixin.add_text()
+ self.mixin.add_html()
+ self.mixin.add_full()
+ self.assertEquals(sorted(self.mixin.mime_header()), sorted({
+ 'Accept': '%s, %s, %s, %s' % (
+ self._parse_mime_type('raw'),
+ self._parse_mime_type('text'),
+ self._parse_mime_type('html'),
+ self._parse_mime_type('full'))}))
+
+
+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)
+ kwargs = {'converter': Rawlizer}
+ self.assertIsInstance(self.handler._get_converter(kwargs),
+ Rawlizer)
+ self.assertEquals(kwargs, {})
+ 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)