diff options
| -rw-r--r-- | debug_toolbar/panels/redirects.py | 14 | ||||
| -rw-r--r-- | tests/panels/test_profiling.py | 1 | ||||
| -rw-r--r-- | tests/panels/test_redirects.py | 46 | ||||
| -rw-r--r-- | tests/tests.py | 1 | 
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 | 
