aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/tests
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2012-04-28 23:43:28 +0200
committerDavid Medina <davidmedina9@gmail.com>2012-04-28 23:43:28 +0200
commitc24e6efbb59065dcb6655d47bb7b0254f2753bff (patch)
tree32290846e640555ec4804c53c4aab62cbbe7bd13 /pygithub3/tests
parent:sparkles: Release 0.3 :sparkles: (diff)
parentdocstring link typo (diff)
downloadpython-github3-c24e6efbb59065dcb6655d47bb7b0254f2753bff.tar.xz
python-github3-c24e6efbb59065dcb6655d47bb7b0254f2753bff.zip
Merged pull request #4 from natw:services/pull_requests
Diffstat (limited to 'pygithub3/tests')
-rw-r--r--pygithub3/tests/requests/test_core.py25
-rw-r--r--pygithub3/tests/services/test_pull_requests.py201
-rw-r--r--pygithub3/tests/utils/base.py15
3 files changed, 233 insertions, 8 deletions
diff --git a/pygithub3/tests/requests/test_core.py b/pygithub3/tests/requests/test_core.py
index cd162b3..4632056 100644
--- a/pygithub3/tests/requests/test_core.py
+++ b/pygithub3/tests/requests/test_core.py
@@ -2,12 +2,14 @@
# -*- encoding: utf-8 -*-
from mock import Mock
+from nose.tools import raises
from pygithub3.tests.utils.core import TestCase
from pygithub3.requests.base import Factory, Body, json, Request
-from pygithub3.exceptions import (UriInvalid, DoesNotExists, ValidationError,
- InvalidBodySchema)
-from pygithub3.tests.utils.base import mock_json, DummyRequest
+from pygithub3.exceptions import (UriInvalid, RequestDoesNotExist,
+ ValidationError, InvalidBodySchema)
+from pygithub3.tests.utils.base import (mock_json, DummyRequest,
+ DummyRequestValidation)
from pygithub3.tests.utils.requests import (
RequestWithArgs, RequestCleanedUri, RequestBodyInvalidSchema,
RequestCleanedBody)
@@ -27,8 +29,8 @@ class TestFactory(TestCase):
self.assertRaises(UriInvalid, self.f, '.invalid')
def test_BUILDER_with_fake_action(self):
- self.assertRaises(DoesNotExists, self.f, 'users.fake')
- self.assertRaises(DoesNotExists, self.f, 'fake.users')
+ self.assertRaises(RequestDoesNotExist, self.f, 'users.fake')
+ self.assertRaises(RequestDoesNotExist, self.f, 'fake.users')
def test_BUILDER_builds_users(self):
""" Users.get as real test because it wouldn't be useful mock
@@ -74,7 +76,7 @@ class TestRequestBodyWithSchema(TestCase):
def setUp(self):
valid_body = dict(schema=('arg1', 'arg2'), required=('arg1', ))
- self.b = Body({}, **valid_body)
+ self.b = Body({}, valid_body)
def test_with_body_empty_and_schema_permissive(self):
self.b.schema = ('arg1', 'arg2', '...')
@@ -100,3 +102,14 @@ class TestRequestBodyWithSchema(TestCase):
def test_only_valid_keys(self):
self.b.content = dict(arg1='arg1', arg2='arg2', fake='test')
self.assertEqual(self.b.dumps(), dict(arg1='arg1', arg2='arg2'))
+
+
+class TestBodyValidation(TestCase):
+ @raises(ValidationError)
+ def test_with_error(self):
+ req = DummyRequestValidation(
+ body={'foo': 'bar', 'error': 'yes'},
+ )
+ req.body_schema = {'schema': ('foo',),
+ 'required': ('foo',)}
+ req.get_body()
diff --git a/pygithub3/tests/services/test_pull_requests.py b/pygithub3/tests/services/test_pull_requests.py
new file mode 100644
index 0000000..7fc15b7
--- /dev/null
+++ b/pygithub3/tests/services/test_pull_requests.py
@@ -0,0 +1,201 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+import requests
+from mock import patch, Mock
+from nose.tools import raises
+
+from pygithub3.tests.utils.core import TestCase
+from pygithub3.services.pull_requests import PullRequests, Comments
+from pygithub3.resources.base import json
+from pygithub3.requests.base import ValidationError
+from pygithub3.tests.utils.base import (mock_response, mock_response_result,
+ mock_json)
+from pygithub3.tests.utils.services import _
+
+
+json.dumps = Mock(side_effect=mock_json)
+json.loads = Mock(side_effect=mock_json)
+
+
+@patch.object(requests.sessions.Session, 'request')
+class TestPullRequestsService(TestCase):
+ def setUp(self):
+ self.service = PullRequests(user='user', repo='repo')
+
+ def test_LIST(self, reqm):
+ reqm.return_value = mock_response_result()
+ self.service.list().all()
+ self.assertEqual(
+ reqm.call_args[0],
+ ('get', _('repos/user/repo/pulls'))
+ )
+
+ def test_GET(self, reqm):
+ reqm.return_value = mock_response()
+ self.service.get(123)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('get', _('repos/user/repo/pulls/123'))
+ )
+
+ def test_CREATE_with_title_and_body(self, reqm):
+ reqm.return_value = mock_response('post')
+ data = {
+ 'title': 'this is a pull request',
+ 'body': 'merge me!',
+ 'head': 'octocat:some-feature',
+ 'base': 'master',
+ }
+ self.service.create(data)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('post', _('repos/user/repo/pulls'))
+ )
+
+ def test_CREATE_with_issue(self, reqm):
+ reqm.return_value = mock_response('post')
+ data = {
+ 'issue': 1,
+ 'head': 'octocat:some-feature',
+ 'base': 'master',
+ }
+ self.service.create(data)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('post', _('repos/user/repo/pulls'))
+ )
+
+ @raises(ValidationError)
+ def test_CREATE_with_no_title(self, reqm):
+ reqm.return_value = mock_response('post')
+ data = {
+ 'body': 'merge me!',
+ 'head': 'octocat:some-feature',
+ 'base': 'master',
+ }
+ self.service.create(data)
+
+ def test_UPDATE(self, reqm):
+ reqm.return_value = mock_response('patch')
+ data = {}
+ self.service.update(123, data)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('patch', _('repos/user/repo/pulls/123'))
+ )
+
+ @raises(ValidationError)
+ def test_UPDATE_with_invalid_state(self, reqm):
+ reqm.return_value = mock_response('patch')
+ data = {'state': 'Illinois'}
+ self.service.update(123, data)
+
+ def test_LIST_COMMITS(self, reqm):
+ reqm.return_value = mock_response_result('get')
+ self.service.list_commits(123).all()
+ self.assertEqual(
+ reqm.call_args[0],
+ ('get', _('repos/user/repo/pulls/123/commits'))
+ )
+
+ def test_LIST_FILES(self, reqm):
+ reqm.return_value = mock_response_result('get')
+ self.service.list_files(123).all()
+ self.assertEqual(
+ reqm.call_args[0],
+ ('get', _('repos/user/repo/pulls/123/files'))
+ )
+
+ def test_MERGE_STATUS_true(self, reqm):
+ reqm.return_value = mock_response(204)
+ resp = self.service.merge_status(123)
+ self.assertEqual(True, resp)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('head', _('repos/user/repo/pulls/123/merge'))
+ )
+
+ def test_MERGE_STATUS_false(self, reqm):
+ reqm.return_value = mock_response(404)
+ resp = self.service.merge_status(123)
+ self.assertEqual(False, resp)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('head', _('repos/user/repo/pulls/123/merge'))
+ )
+
+ def test_MERGE(self, reqm):
+ reqm.return_value = mock_response(200)
+ self.service.merge(123, 'merging this')
+ self.assertEqual(
+ reqm.call_args[0],
+ ('put', _('repos/user/repo/pulls/123/merge'))
+ )
+
+
+@patch.object(requests.sessions.Session, 'request')
+class TestPullRequestCommentsService(TestCase):
+ def setUp(self):
+ self.service = Comments(user='user', repo='repo')
+
+ def test_LIST(self, reqm):
+ reqm.return_value = mock_response_result(200)
+ self.service.list(123).all()
+ self.assertEqual(
+ reqm.call_args[0],
+ ('get', _('repos/user/repo/pulls/123/comments'))
+ )
+
+ def test_GET(self, reqm):
+ reqm.return_value = mock_response(200)
+ self.service.get(1)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('get', _('repos/user/repo/pulls/comments/1'))
+ )
+
+ def test_CREATE(self, reqm):
+ reqm.return_value = mock_response(201)
+ data = {
+ 'body': ':sparkles:',
+ 'commit_id': 'abc123',
+ 'path': 'foo.txt',
+ 'position': '2',
+ }
+ self.service.create(1, data)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('post', _('repos/user/repo/pulls/1/comments'))
+ )
+
+ def test_CREATE_in_reply_to(self, reqm):
+ reqm.return_value = mock_response(201)
+ data = {
+ 'body': ':sparkles:',
+ 'in_reply_to': '5',
+ }
+ self.service.create(1, data)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('post', _('repos/user/repo/pulls/1/comments'))
+ )
+
+ def test_EDIT(self, reqm):
+ reqm.return_value = mock_response(200)
+ data = {
+ 'body': 'something completely different',
+ }
+ self.service.edit(1, data)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('patch', _('repos/user/repo/pulls/comments/1'))
+ )
+
+ def test_DELETE(self, reqm):
+ reqm.return_value = mock_response(204)
+ self.service.delete(1)
+ self.assertEqual(
+ reqm.call_args[0],
+ ('delete', _('repos/user/repo/pulls/comments/1'))
+ )
diff --git a/pygithub3/tests/utils/base.py b/pygithub3/tests/utils/base.py
index 49ea2b4..b3c3b76 100644
--- a/pygithub3/tests/utils/base.py
+++ b/pygithub3/tests/utils/base.py
@@ -4,7 +4,7 @@
from mock import Mock
from pygithub3.resources.base import Resource
-from pygithub3.requests.base import Request
+from pygithub3.requests.base import Request, ValidationError
def mock_json(content):
@@ -14,7 +14,7 @@ def mock_json(content):
def mock_response(status_code='get', content={}):
CODES = dict(get=200, patch=200, post=201, delete=204)
response = Mock(name='response')
- response.status_code = CODES[str(status_code).lower()] or status_code
+ response.status_code = CODES.get(str(status_code).lower(), status_code)
response.content = content
return response
@@ -37,3 +37,14 @@ DummyResource.loads = Mock(side_effect=loads_mock)
class DummyRequest(Request):
uri = 'dummyrequest'
resource = DummyResource
+
+
+class DummyRequestValidation(DummyRequest):
+ body_schema = {
+ 'schema': ('foo', 'error'),
+ 'required': ('foo',)
+ }
+
+ def validate_body(self, body):
+ if body.get('error') == 'yes':
+ raise ValidationError('yes')