From f4666321048d04514a4900b7301d61a918082bfd Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Fri, 22 Nov 2013 19:55:11 +0100 Subject: Add tests for redirects panel. Also simplify the implementation. --- debug_toolbar/panels/redirects.py | 14 ++++++------ tests/panels/test_profiling.py | 1 - tests/panels/test_redirects.py | 46 +++++++++++++++++++++++++++++++++++++++ tests/tests.py | 1 + 4 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 tests/panels/test_redirects.py diff --git a/debug_toolbar/panels/redirects.py b/debug_toolbar/panels/redirects.py index b743a65..605dde3 100644 --- a/debug_toolbar/panels/redirects.py +++ b/debug_toolbar/panels/redirects.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals from django.core.handlers.wsgi import STATUS_CODE_TEXT -from django.http import HttpResponseRedirect from django.shortcuts import render from django.utils.translation import ugettext as _ @@ -22,14 +21,15 @@ class InterceptRedirectsPanel(DebugPanel): return self.toolbar.request.COOKIES.get('djdt' + self.panel_id, default) == 'on' def process_response(self, request, response): - if isinstance(response, HttpResponseRedirect): + if 300 <= int(response.status_code) < 400: redirect_to = response.get('Location', None) if redirect_to: - try: - status_text = STATUS_CODE_TEXT[response.status_code] - except KeyError: - status_text = 'UNKNOWN STATUS CODE' - status_line = '%s %s' % (response.status_code, status_text.title()) + try: # Django >= 1.6 + reason_phrase = response.reason_phrase + except AttributeError: + reason_phrase = STATUS_CODE_TEXT.get(response.status_code, + 'UNKNOWN STATUS CODE') + status_line = '%s %s' % (response.status_code, reason_phrase) cookies = response.cookies context = {'redirect_to': redirect_to, 'status_line': status_line} response = render(request, 'debug_toolbar/redirect.html', context) diff --git a/tests/panels/test_profiling.py b/tests/panels/test_profiling.py index 4e01073..f6bb7d3 100644 --- a/tests/panels/test_profiling.py +++ b/tests/panels/test_profiling.py @@ -43,7 +43,6 @@ class ProfilingPanelTestCase(BaseTestCase): profiling.DJ_PROFILE_USE_LINE_PROFILER = _use_line_profiler - @override_settings(DEBUG=True, DEBUG_TOOLBAR_PANELS=['debug_toolbar.panels.profiling.ProfilingDebugPanel']) class ProfilingPanelIntegrationTestCase(TestCase): diff --git a/tests/panels/test_redirects.py b/tests/panels/test_redirects.py new file mode 100644 index 0000000..400cdcc --- /dev/null +++ b/tests/panels/test_redirects.py @@ -0,0 +1,46 @@ +from __future__ import unicode_literals + +import django +from django.http import HttpResponse +from django.test.utils import override_settings +from django.utils import unittest + +from ..base import BaseTestCase + + +@override_settings(DEBUG_TOOLBAR_CONFIG={'INTERCEPT_REDIRECTS': True}) +class RedirectsPanelTestCase(BaseTestCase): + + def setUp(self): + super(RedirectsPanelTestCase, self).setUp() + self.panel = self.toolbar.get_panel_by_id('InterceptRedirectsPanel') + + def test_regular_response(self): + response = self.panel.process_response(self.request, self.response) + self.assertTrue(response is self.response) + + def test_not_a_redirect(self): + redirect = HttpResponse(status=304) # not modified + response = self.panel.process_response(self.request, redirect) + self.assertTrue(response is redirect) + + def test_redirect(self): + redirect = HttpResponse(status=302) + redirect['Location'] = 'http://somewhere/else/' + response = self.panel.process_response(self.request, redirect) + self.assertFalse(response is redirect) + self.assertContains(response, '302 FOUND') + self.assertContains(response, 'http://somewhere/else/') + + def test_unknown_status_code(self): + redirect = HttpResponse(status=369) + redirect['Location'] = 'http://somewhere/else/' + response = self.panel.process_response(self.request, redirect) + self.assertContains(response, '369 UNKNOWN STATUS CODE') + + @unittest.skipIf(django.VERSION[:2] < (1, 6), "reason isn't supported") + def test_unknown_status_code_with_reason(self): + redirect = HttpResponse(status=369, reason='Look Ma!') + redirect['Location'] = 'http://somewhere/else/' + response = self.panel.process_response(self.request, redirect) + self.assertContains(response, '369 Look Ma!') diff --git a/tests/tests.py b/tests/tests.py index b926895..b08ac1c 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -5,6 +5,7 @@ if django.VERSION[:2] < (1, 6): # unittest-style discovery isn't available from .panels.test_cache import * # noqa from .panels.test_logger import * # noqa from .panels.test_profiling import * # noqa + from .panels.test_redirects import * # noqa from .panels.test_request_vars import * # noqa from .panels.test_sql import * # noqa from .panels.test_template import * # noqa -- cgit v1.2.3