114 lines
3.9 KiB
Python
114 lines
3.9 KiB
Python
import unittest
|
|
import mock
|
|
|
|
from pydiscourse import client
|
|
|
|
|
|
def prepare_response(request):
|
|
# we need to mocked response to look a little more real
|
|
request.return_value = mock.MagicMock(headers={'content-type': 'application/json; charset=utf-8'})
|
|
|
|
|
|
class ClientBaseTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.host = 'testhost'
|
|
self.api_username = 'testuser'
|
|
self.api_key = 'testkey'
|
|
|
|
self.client = client.DiscourseClient(self.host, self.api_username, self.api_key)
|
|
|
|
def assertRequestCalled(self, request, verb, url, **params):
|
|
self.assertTrue(request.called)
|
|
|
|
args, kwargs = request.call_args
|
|
|
|
self.assertEqual(args[0], verb)
|
|
self.assertEqual(args[1], self.host + url)
|
|
|
|
kwargs = kwargs['params']
|
|
self.assertEqual(kwargs.pop('api_username'), self.api_username)
|
|
self.assertEqual(kwargs.pop('api_key'), self.api_key)
|
|
self.assertEqual(kwargs, params)
|
|
|
|
|
|
@mock.patch('requests.request')
|
|
class TestUser(ClientBaseTestCase):
|
|
|
|
def test_user(self, request):
|
|
prepare_response(request)
|
|
self.client.user('someuser')
|
|
self.assertRequestCalled(request, 'GET', '/users/someuser.json')
|
|
|
|
def test_create_user(self, request):
|
|
prepare_response(request)
|
|
self.client.create_user('Test User', 'testuser', 'test@example.com', 'notapassword')
|
|
self.assertEqual(request.call_count, 2)
|
|
# XXX incomplete
|
|
|
|
def test_update_email(self, request):
|
|
prepare_response(request)
|
|
email = 'test@example.com'
|
|
self.client.update_email('someuser', email)
|
|
self.assertRequestCalled(request, 'PUT', '/users/someuser/preferences/email', email=email)
|
|
|
|
def test_update_user(self, request):
|
|
prepare_response(request)
|
|
self.client.update_user('someuser', a='a', b='b')
|
|
self.assertRequestCalled(request, 'PUT', '/users/someuser', a='a', b='b')
|
|
|
|
def test_update_username(self, request):
|
|
prepare_response(request)
|
|
self.client.update_username('someuser', 'newname')
|
|
self.assertRequestCalled(request, 'PUT', '/users/someuser/preferences/username', username='newname')
|
|
|
|
|
|
@mock.patch('requests.request')
|
|
class TestTopics(ClientBaseTestCase):
|
|
|
|
def test_hot_topics(self, request):
|
|
prepare_response(request)
|
|
self.client.hot_topics()
|
|
self.assertRequestCalled(request, 'GET', '/hot.json')
|
|
|
|
def test_latest_topics(self, request):
|
|
prepare_response(request)
|
|
self.client.latest_topics()
|
|
self.assertRequestCalled(request, 'GET', '/latest.json')
|
|
|
|
def test_new_topics(self, request):
|
|
prepare_response(request)
|
|
self.client.new_topics()
|
|
self.assertRequestCalled(request, 'GET', '/new.json')
|
|
|
|
def test_topic(self, request):
|
|
prepare_response(request)
|
|
self.client.topic(22)
|
|
self.assertRequestCalled(request, 'GET', '/t/22.json')
|
|
|
|
def test_topics_by(self, request):
|
|
prepare_response(request)
|
|
r = self.client.topics_by('someuser')
|
|
self.assertRequestCalled(request, 'GET', '/topics/created-by/someuser.json')
|
|
self.assertEqual(r, request().json()['topic_list']['topics'])
|
|
|
|
def invite_user_to_topic(self, request):
|
|
prepare_response(request)
|
|
email = 'test@example.com'
|
|
self.client.invite_user_to_topic(email, 22)
|
|
self.assertRequestCalled(request, 'POST', '/t/22/invite.json', email=email, topic_id=22)
|
|
|
|
|
|
@mock.patch('requests.request')
|
|
class MiscellaneousTests(ClientBaseTestCase):
|
|
|
|
def test_search(self, request):
|
|
prepare_response(request)
|
|
self.client.search('needle')
|
|
self.assertRequestCalled(request, 'GET', '/search.json', term='needle')
|
|
|
|
def test_categories(self, request):
|
|
prepare_response(request)
|
|
r = self.client.categories()
|
|
self.assertRequestCalled(request, 'GET', '/categories.json')
|
|
self.assertEqual(r, request().json()['category_list']['categories'])
|