diff options
| author | Tom Christie | 2012-11-06 10:44:19 +0000 | 
|---|---|---|
| committer | Tom Christie | 2012-11-06 10:44:19 +0000 | 
| commit | b19c58ae17ee54a3a8d193608660d96fd52f83f0 (patch) | |
| tree | c4deae81b0f0de7083ecadce29ce5813b6411db4 /rest_framework/tests | |
| parent | 455a8cedcf5aa1f265ae95d4f3bff359d51910c0 (diff) | |
| download | django-rest-framework-b19c58ae17ee54a3a8d193608660d96fd52f83f0.tar.bz2 | |
Support for HTML error templates.  Fixes #319.
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/htmlrenderer.py | 65 | 
1 files changed, 65 insertions, 0 deletions
diff --git a/rest_framework/tests/htmlrenderer.py b/rest_framework/tests/htmlrenderer.py index 10d7e31d..4caed59e 100644 --- a/rest_framework/tests/htmlrenderer.py +++ b/rest_framework/tests/htmlrenderer.py @@ -1,4 +1,6 @@ +from django.core.exceptions import PermissionDenied  from django.conf.urls.defaults import patterns, url +from django.http import Http404  from django.test import TestCase  from django.template import TemplateDoesNotExist, Template  import django.template.loader @@ -17,8 +19,22 @@ def example(request):      return Response(data, template_name='example.html') +@api_view(('GET',)) +@renderer_classes((TemplateHTMLRenderer,)) +def permission_denied(request): +    raise PermissionDenied() + + +@api_view(('GET',)) +@renderer_classes((TemplateHTMLRenderer,)) +def not_found(request): +    raise Http404() + +  urlpatterns = patterns('',      url(r'^$', example), +    url(r'^permission_denied$', permission_denied), +    url(r'^not_found$', not_found),  ) @@ -48,3 +64,52 @@ class TemplateHTMLRendererTests(TestCase):          response = self.client.get('/')          self.assertContains(response, "example: foobar")          self.assertEquals(response['Content-Type'], 'text/html') + +    def test_not_found_html_view(self): +        response = self.client.get('/not_found') +        self.assertEquals(response.status_code, 404) +        self.assertEquals(response.content, "404 Not Found") +        self.assertEquals(response['Content-Type'], 'text/html') + +    def test_permission_denied_html_view(self): +        response = self.client.get('/permission_denied') +        self.assertEquals(response.status_code, 403) +        self.assertEquals(response.content, "403 Forbidden") +        self.assertEquals(response['Content-Type'], 'text/html') + + +class TemplateHTMLRendererExceptionTests(TestCase): +    urls = 'rest_framework.tests.htmlrenderer' + +    def setUp(self): +        """ +        Monkeypatch get_template +        """ +        self.get_template = django.template.loader.get_template + +        def get_template(template_name): +            if template_name == '404.html': +                return Template("404: {{ detail }}") +            if template_name == '403.html': +                return Template("403: {{ detail }}") +            raise TemplateDoesNotExist(template_name) + +        django.template.loader.get_template = get_template + +    def tearDown(self): +        """ +        Revert monkeypatching +        """ +        django.template.loader.get_template = self.get_template + +    def test_not_found_html_view_with_template(self): +        response = self.client.get('/not_found') +        self.assertEquals(response.status_code, 404) +        self.assertEquals(response.content, "404: Not found") +        self.assertEquals(response['Content-Type'], 'text/html') + +    def test_permission_denied_html_view_with_template(self): +        response = self.client.get('/permission_denied') +        self.assertEquals(response.status_code, 403) +        self.assertEquals(response.content, "403: Permission denied") +        self.assertEquals(response['Content-Type'], 'text/html')  | 
