aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests/negotiation.py
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework/tests/negotiation.py')
-rw-r--r--rest_framework/tests/negotiation.py35
1 files changed, 29 insertions, 6 deletions
diff --git a/rest_framework/tests/negotiation.py b/rest_framework/tests/negotiation.py
index 43721b84..d7ef6470 100644
--- a/rest_framework/tests/negotiation.py
+++ b/rest_framework/tests/negotiation.py
@@ -3,18 +3,24 @@ from django.test import TestCase
from django.test.client import RequestFactory
from rest_framework.negotiation import DefaultContentNegotiation
from rest_framework.request import Request
+from rest_framework.renderers import BaseRenderer
factory = RequestFactory()
-class MockJSONRenderer(object):
+class MockJSONRenderer(BaseRenderer):
media_type = 'application/json'
-
-class MockHTMLRenderer(object):
+class MockHTMLRenderer(BaseRenderer):
media_type = 'text/html'
+class NoCharsetSpecifiedRenderer(BaseRenderer):
+ media_type = 'my/media'
+
+class CharsetSpecifiedRenderer(BaseRenderer):
+ media_type = 'my/media'
+ charset = 'mycharset'
class TestAcceptedMediaType(TestCase):
def setUp(self):
@@ -26,15 +32,32 @@ class TestAcceptedMediaType(TestCase):
def test_client_without_accept_use_renderer(self):
request = Request(factory.get('/'))
- accepted_renderer, accepted_media_type = self.select_renderer(request)
+ accepted_renderer, accepted_media_type, charset = self.select_renderer(request)
self.assertEqual(accepted_media_type, 'application/json')
def test_client_underspecifies_accept_use_renderer(self):
request = Request(factory.get('/', HTTP_ACCEPT='*/*'))
- accepted_renderer, accepted_media_type = self.select_renderer(request)
+ accepted_renderer, accepted_media_type, charset = self.select_renderer(request)
self.assertEqual(accepted_media_type, 'application/json')
def test_client_overspecifies_accept_use_client(self):
request = Request(factory.get('/', HTTP_ACCEPT='application/json; indent=8'))
- accepted_renderer, accepted_media_type = self.select_renderer(request)
+ accepted_renderer, accepted_media_type, charset = self.select_renderer(request)
self.assertEqual(accepted_media_type, 'application/json; indent=8')
+
+class TestCharset(TestCase):
+ def setUp(self):
+ self.renderers = [NoCharsetSpecifiedRenderer()]
+ self.negotiator = DefaultContentNegotiation()
+
+ def test_returns_none_if_no_charset_set(self):
+ request = Request(factory.get('/'))
+ renderers = [NoCharsetSpecifiedRenderer()]
+ _, _, charset = self.negotiator.select_renderer(request, renderers)
+ self.assertIsNone(charset)
+
+ def test_returns_attribute_from_renderer_if_charset_is_set(self):
+ request = Request(factory.get('/'))
+ renderers = [CharsetSpecifiedRenderer()]
+ _, _, charset = self.negotiator.select_renderer(request, renderers)
+ self.assertEquals(CharsetSpecifiedRenderer.charset, charset) \ No newline at end of file