File: test_redirects.py

package info (click to toggle)
python-django-debug-toolbar 1%3A6.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,116 kB
  • sloc: python: 7,869; javascript: 636; makefile: 67; sh: 16
file content (120 lines) | stat: -rw-r--r-- 4,822 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import copy
import warnings

from django.conf import settings
from django.http import HttpResponse
from django.test import AsyncRequestFactory

from debug_toolbar.panels.redirects import RedirectsPanel
from debug_toolbar.toolbar import DebugToolbar

from ..base import BaseTestCase


class RedirectsPanelTestCase(BaseTestCase):
    panel_id = RedirectsPanel.panel_id

    def setUp(self):
        # Suppress the deprecation warning during setup
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", DeprecationWarning)
            super().setUp()

    def test_regular_response(self):
        not_redirect = HttpResponse()
        self._get_response = lambda request: not_redirect
        response = self.panel.process_request(self.request)
        self.assertTrue(response is not_redirect)

    def test_not_a_redirect(self):
        redirect = HttpResponse(status=304)
        self._get_response = lambda request: redirect
        response = self.panel.process_request(self.request)
        self.assertTrue(response is redirect)

    def test_redirect(self):
        redirect = HttpResponse(status=302)
        redirect["Location"] = "http://somewhere/else/"
        self._get_response = lambda request: redirect
        response = self.panel.process_request(self.request)
        self.assertFalse(response is redirect)
        self.assertContains(response, "302 Found")
        self.assertContains(response, "http://somewhere/else/")

    def test_redirect_with_broken_context_processor(self):
        TEMPLATES = copy.deepcopy(settings.TEMPLATES)
        TEMPLATES[1]["OPTIONS"]["context_processors"] = [
            "tests.context_processors.broken"
        ]

        with self.settings(TEMPLATES=TEMPLATES):
            redirect = HttpResponse(status=302)
            redirect["Location"] = "http://somewhere/else/"
            self._get_response = lambda request: redirect
            response = self.panel.process_request(self.request)
            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/"
        self._get_response = lambda request: redirect
        response = self.panel.process_request(self.request)
        self.assertContains(response, "369 Unknown Status Code")

    def test_unknown_status_code_with_reason(self):
        redirect = HttpResponse(status=369, reason="Look Ma!")
        redirect["Location"] = "http://somewhere/else/"
        self._get_response = lambda request: redirect
        response = self.panel.process_request(self.request)
        self.assertContains(response, "369 Look Ma!")

    def test_insert_content(self):
        """
        Test that the panel only inserts content after generate_stats and
        not the process_request.
        """
        redirect = HttpResponse(status=304)
        self._get_response = lambda request: redirect
        response = self.panel.process_request(self.request)
        self.assertIsNotNone(response)
        response = self.panel.generate_stats(self.request, redirect)
        self.assertIsNone(response)

    async def test_async_compatibility(self):
        redirect = HttpResponse(status=302)

        async def get_response(request):
            return redirect

        await_response = await get_response(self.request)
        self._get_response = get_response

        self.request = AsyncRequestFactory().get("/")
        response = await self.panel.process_request(self.request)
        self.assertIsInstance(response, HttpResponse)
        self.assertTrue(response is await_response)

    def test_original_response_preserved(self):
        redirect = HttpResponse(status=302)
        redirect["Location"] = "http://somewhere/else/"
        self._get_response = lambda request: redirect
        response = self.panel.process_request(self.request)
        self.assertFalse(response is redirect)
        self.assertTrue(hasattr(response, "original_response"))
        self.assertTrue(response.original_response is redirect)
        self.assertIsNone(response.get("Location"))
        self.assertEqual(
            response.original_response.get("Location"), "http://somewhere/else/"
        )

    def test_deprecation_warning(self):
        """Test that a deprecation warning is shown when RedirectsPanel is instantiated."""

        with self.assertWarns(DeprecationWarning) as cm:
            toolbar = DebugToolbar(self.request, self._get_response)
            toolbar.get_panel_by_id(RedirectsPanel.panel_id)

        self.assertIn("RedirectsPanel is deprecated", str(cm.warning))
        self.assertIn("HistoryPanel", str(cm.warning))