open source driving agent
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.

90 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))