aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debug_toolbar/panels/redirects.py14
-rw-r--r--tests/panels/test_profiling.py1
-rw-r--r--tests/panels/test_redirects.py46
-rw-r--r--tests/tests.py1
4 files changed, 54 insertions, 8 deletions
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