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
|
# coding: utf-8
from __future__ import unicode_literals
from xml.etree import ElementTree as ET
from django.test import TestCase, RequestFactory
from django.test.utils import override_settings
from django.utils import six
from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar
from debug_toolbar.panels.request_vars import RequestVarsDebugPanel
from .base import BaseTestCase
from .views import regular_view
rf = RequestFactory()
@override_settings(DEBUG=True)
class DebugToolbarTestCase(BaseTestCase):
urls = 'tests.urls'
def test_show_toolbar(self):
self.assertTrue(show_toolbar(self.request))
def test_show_toolbar_DEBUG(self):
with self.settings(DEBUG=False):
self.assertFalse(show_toolbar(self.request))
def test_show_toolbar_INTERNAL_IPS(self):
with self.settings(INTERNAL_IPS=[]):
self.assertFalse(show_toolbar(self.request))
def _resolve_stats(self, path):
# takes stats from RequestVars panel
self.request.path = path
panel = self.toolbar.get_panel(RequestVarsDebugPanel)
panel.process_request(self.request)
panel.process_response(self.request, self.response)
return self.toolbar.stats['requestvars']
def test_url_resolving_positional(self):
stats = self._resolve_stats('/resolving1/a/b/')
self.assertEqual(stats['view_urlname'], 'positional-resolving')
self.assertEqual(stats['view_func'], 'tests.views.resolving_view')
self.assertEqual(stats['view_args'], ('a', 'b'))
self.assertEqual(stats['view_kwargs'], {})
def test_url_resolving_named(self):
stats = self._resolve_stats('/resolving2/a/b/')
self.assertEqual(stats['view_args'], ())
self.assertEqual(stats['view_kwargs'], {'arg1': 'a', 'arg2': 'b'})
def test_url_resolving_mixed(self):
stats = self._resolve_stats('/resolving3/a/')
self.assertEqual(stats['view_args'], ('a',))
self.assertEqual(stats['view_kwargs'], {'arg2': 'default'})
def test_url_resolving_bad(self):
stats = self._resolve_stats('/non-existing-url/')
self.assertEqual(stats['view_urlname'], 'None')
self.assertEqual(stats['view_args'], 'None')
self.assertEqual(stats['view_kwargs'], 'None')
self.assertEqual(stats['view_func'], '<no view>')
# Django doesn't guarantee that process_request, process_view and
# process_response always get called in this order.
def test_middleware_view_only(self):
DebugToolbarMiddleware().process_view(self.request, regular_view, ('title',), {})
def test_middleware_response_only(self):
DebugToolbarMiddleware().process_response(self.request, self.response)
@override_settings(DEBUG=True)
class DebugToolbarIntegrationTestCase(TestCase):
urls = 'tests.urls'
def test_middleware(self):
response = self.client.get('/execute_sql/')
self.assertEqual(response.status_code, 200)
@override_settings(DEFAULT_CHARSET='iso-8859-1')
def test_non_utf8_charset(self):
response = self.client.get('/regular/ASCII/')
self.assertContains(response, 'ASCII') # template
self.assertContains(response, 'djDebug') # toolbar
response = self.client.get('/regular/LÀTÍN/')
self.assertContains(response, 'LÀTÍN') # template
self.assertContains(response, 'djDebug') # toolbar
def test_xml_validation(self):
response = self.client.get('/regular/XML/')
ET.fromstring(response.content) # shouldn't raise ParseError
|