From 1836ee60f0a3772188c9341efe737aa03ca6f2ff Mon Sep 17 00:00:00 2001 From: David Medina Date: Sat, 12 Nov 2011 19:06:55 +0100 Subject: PEP8 and renaming --- github3/tests/api_test.py | 115 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 github3/tests/api_test.py (limited to 'github3/tests/api_test.py') diff --git a/github3/tests/api_test.py b/github3/tests/api_test.py new file mode 100644 index 0000000..258a737 --- /dev/null +++ b/github3/tests/api_test.py @@ -0,0 +1,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') -- cgit v1.2.3-59-g8ed1b From 84a085138f69401bb5787916a530b59935c8dc19 Mon Sep 17 00:00:00 2001 From: David Medina Date: Wed, 16 Nov 2011 01:52:33 +0100 Subject: Fix 411 with PUT request with data as None, requests module didn't add specific header --- github3/api.py | 5 +++-- github3/tests/api_test.py | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'github3/tests/api_test.py') diff --git a/github3/api.py b/github3/api.py index 1c467ff..a4ee4a9 100644 --- a/github3/api.py +++ b/github3/api.py @@ -72,8 +72,9 @@ class GithubCore(object): def put(self, request, **kwargs): """ PUT request """ - # Content-length: 0 to headers ? - response = self._request('PUT', request, **kwargs) + + response = self._request('PUT', request, + headers={'Content-length': '0'}, **kwargs) assert response.status_code == 204 return response diff --git a/github3/tests/api_test.py b/github3/tests/api_test.py index 258a737..3ae75ee 100644 --- a/github3/tests/api_test.py +++ b/github3/tests/api_test.py @@ -113,3 +113,12 @@ class TestGithubCore(TestCase): 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'}) -- cgit v1.2.3-59-g8ed1b