diff options
Diffstat (limited to 'rest_framework/tests/response.py')
| -rw-r--r-- | rest_framework/tests/response.py | 50 | 
1 files changed, 28 insertions, 22 deletions
| diff --git a/rest_framework/tests/response.py b/rest_framework/tests/response.py index f2a1c635..8f1163e8 100644 --- a/rest_framework/tests/response.py +++ b/rest_framework/tests/response.py @@ -12,6 +12,7 @@ from rest_framework.renderers import (  from rest_framework.settings import api_settings  from rest_framework.compat import six +  class MockPickleRenderer(BaseRenderer):      media_type = 'application/pickle' @@ -19,6 +20,7 @@ class MockPickleRenderer(BaseRenderer):  class MockJsonRenderer(BaseRenderer):      media_type = 'application/json' +  class MockTextMediaRenderer(BaseRenderer):      media_type = 'text/html' @@ -44,6 +46,7 @@ class RendererB(BaseRenderer):      def render(self, data, media_type=None, renderer_context=None):          return RENDERER_B_SERIALIZER(data) +  class RendererC(RendererB):      media_type = 'mock/rendererc'      format = 'formatc' @@ -56,6 +59,14 @@ class MockView(APIView):      def get(self, request, **kwargs):          return Response(DUMMYCONTENT, status=DUMMYSTATUS) + +class MockViewSettingCharset(APIView): +    renderer_classes = (RendererA, RendererB, RendererC) + +    def get(self, request, **kwargs): +        return Response(DUMMYCONTENT, status=DUMMYSTATUS, charset='setbyview') + +  class HTMLView(APIView):      renderer_classes = (BrowsableAPIRenderer, ) @@ -70,6 +81,7 @@ class HTMLView1(APIView):          return Response('text')  urlpatterns = patterns('', +    url(r'^setbyview$', MockViewSettingCharset.as_view(renderer_classes=[RendererA, RendererB, RendererC])),      url(r'^.*\.(?P<format>.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])),      url(r'^$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])),      url(r'^html$', HTMLView.as_view()), @@ -178,43 +190,37 @@ class Issue122Tests(TestCase):          """          self.client.get('/html1') +  class Issue807Testts(TestCase):      """      Covers #807      """ -     +      urls = 'rest_framework.tests.response' -     +      def test_does_not_append_charset_by_default(self):          """ -        For backwards compatibility `REST_FRAMEWORK['DEFAULT_CHARSET']` defaults -        to None, so that all legacy code works as expected. +        Renderers don't include a charset unless set explicitly.          """          headers = {"HTTP_ACCEPT": RendererA.media_type}          resp = self.client.get('/', **headers) -        self.assertEquals(RendererA.media_type, resp['Content-Type']) -     +        self.assertEqual(RendererA.media_type, resp['Content-Type']) +      def test_if_there_is_charset_specified_on_renderer_it_gets_appended(self):          """          If renderer class has charset attribute declared, it gets appended          to Response's Content-Type          """ -        resp = self.client.get('/?format=%s' % RendererC.format) +        headers = {"HTTP_ACCEPT": RendererC.media_type} +        resp = self.client.get('/', **headers)          expected = "{0}; charset={1}".format(RendererC.media_type, RendererC.charset) -        self.assertEquals(expected, resp['Content-Type']) -     -    def test_if_there_is_default_charset_specified_it_gets_appended(self): +        self.assertEqual(expected, resp['Content-Type']) + +    def test_charset_set_explictly_on_response(self):          """ -        If user defines `REST_FRAMEWORK['DEFAULT_CHARSET']` it will get appended -        to Content-Type of all responses. +        The charset may be set explictly on the response.          """ -        original_default_charset = api_settings.DEFAULT_CHARSET -        api_settings.DEFAULT_CHARSET = "utf-8" -        headers = {'HTTP_ACCEPT': RendererA.media_type} -        resp = self.client.get('/', **headers) -        expected = "{0}; charset={1}".format( -            RendererA.media_type, -            api_settings.DEFAULT_CHARSET -        ) -        self.assertEquals(expected, resp['Content-Type']) -        api_settings.DEFAULT_CHARSET = original_default_charset
\ No newline at end of file +        headers = {"HTTP_ACCEPT": RendererC.media_type} +        resp = self.client.get('/setbyview', **headers) +        expected = "{0}; charset={1}".format(RendererC.media_type, 'setbyview') +        self.assertEqual(expected, resp['Content-Type']) | 
