You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.8 KiB
89 lines
2.8 KiB
""" Test Django Backend."""
|
|
from __future__ import absolute_import
|
|
import os
|
|
|
|
try:
|
|
from django.core.urlresolvers import RegexURLPattern
|
|
from django.test import TestCase
|
|
except ImportError:
|
|
import unittest
|
|
raise unittest.SkipTest('Django not found for testing')
|
|
|
|
from ...backend.django import JSONRPCAPI, api
|
|
import json
|
|
|
|
|
|
class TestDjangoBackend(TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
os.environ['DJANGO_SETTINGS_MODULE'] = \
|
|
'jsonrpc.tests.test_backend_django.settings'
|
|
super(TestDjangoBackend, cls).setUpClass()
|
|
|
|
def test_urls(self):
|
|
self.assertTrue(isinstance(api.urls, list))
|
|
for api_url in api.urls:
|
|
self.assertTrue(isinstance(api_url, RegexURLPattern))
|
|
|
|
def test_client(self):
|
|
@api.dispatcher.add_method
|
|
def dummy(request):
|
|
return ""
|
|
|
|
json_data = {
|
|
"id": "0",
|
|
"jsonrpc": "2.0",
|
|
"method": "dummy",
|
|
}
|
|
response = self.client.post(
|
|
'',
|
|
json.dumps(json_data),
|
|
content_type='application/json',
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
data = json.loads(response.content.decode('utf8'))
|
|
self.assertEqual(data['result'], '')
|
|
|
|
def test_method_not_allowed(self):
|
|
response = self.client.get(
|
|
'',
|
|
content_type='application/json',
|
|
)
|
|
self.assertEqual(response.status_code, 405, "Should allow only POST")
|
|
|
|
def test_invalid_request(self):
|
|
response = self.client.post(
|
|
'',
|
|
'{',
|
|
content_type='application/json',
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
data = json.loads(response.content.decode('utf8'))
|
|
self.assertEqual(data['error']['code'], -32700)
|
|
self.assertEqual(data['error']['message'], 'Parse error')
|
|
|
|
def test_resource_map(self):
|
|
response = self.client.get('/map')
|
|
self.assertEqual(response.status_code, 200)
|
|
data = response.content.decode('utf8')
|
|
self.assertIn("JSON-RPC map", data)
|
|
|
|
def test_method_not_allowed_prefix(self):
|
|
response = self.client.get(
|
|
'/prefix/',
|
|
content_type='application/json',
|
|
)
|
|
self.assertEqual(response.status_code, 405)
|
|
|
|
def test_resource_map_prefix(self):
|
|
response = self.client.get('/prefix/map')
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_empty_initial_dispatcher(self):
|
|
class SubDispatcher(type(api.dispatcher)):
|
|
pass
|
|
|
|
custom_dispatcher = SubDispatcher()
|
|
custom_api = JSONRPCAPI(custom_dispatcher)
|
|
self.assertEqual(type(custom_api.dispatcher), SubDispatcher)
|
|
self.assertEqual(id(custom_api.dispatcher), id(custom_dispatcher))
|
|
|