aboutsummaryrefslogtreecommitdiffstats
path: root/tests/panels
diff options
context:
space:
mode:
Diffstat (limited to 'tests/panels')
-rw-r--r--tests/panels/__init__.py0
-rw-r--r--tests/panels/test_logger.py53
-rw-r--r--tests/panels/test_sql.py73
-rw-r--r--tests/panels/test_template.py31
4 files changed, 157 insertions, 0 deletions
diff --git a/tests/panels/__init__.py b/tests/panels/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/panels/__init__.py
diff --git a/tests/panels/test_logger.py b/tests/panels/test_logger.py
new file mode 100644
index 0000000..477d100
--- /dev/null
+++ b/tests/panels/test_logger.py
@@ -0,0 +1,53 @@
+from __future__ import unicode_literals
+
+import logging
+
+from debug_toolbar.panels.logger import (
+ LoggingPanel, MESSAGE_IF_STRING_REPRESENTATION_INVALID)
+
+from ..base import BaseTestCase
+
+
+class LoggingPanelTestCase(BaseTestCase):
+
+ def test_happy_case(self):
+ logger = logging.getLogger(__name__)
+ logger.info('Nothing to see here, move along!')
+
+ logging_panel = self.toolbar.get_panel(LoggingPanel)
+ logging_panel.process_response(None, None)
+ records = logging_panel.get_stats()['records']
+
+ self.assertEqual(1, len(records))
+ self.assertEqual('Nothing to see here, move along!',
+ records[0]['message'])
+
+ def test_formatting(self):
+ logger = logging.getLogger(__name__)
+ logger.info('There are %d %s', 5, 'apples')
+
+ logging_panel = self.toolbar.get_panel(LoggingPanel)
+ logging_panel.process_response(None, None)
+ records = logging_panel.get_stats()['records']
+
+ self.assertEqual(1, len(records))
+ self.assertEqual('There are 5 apples',
+ records[0]['message'])
+
+ def test_failing_formatting(self):
+ class BadClass(object):
+ def __str__(self):
+ raise Exception('Please not stringify me!')
+
+ logger = logging.getLogger(__name__)
+
+ # should not raise exception, but fail silently
+ logger.debug('This class is misbehaving: %s', BadClass())
+
+ logging_panel = self.toolbar.get_panel(LoggingPanel)
+ logging_panel.process_response(None, None)
+ records = logging_panel.get_stats()['records']
+
+ self.assertEqual(1, len(records))
+ self.assertEqual(MESSAGE_IF_STRING_REPRESENTATION_INVALID,
+ records[0]['message'])
diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py
new file mode 100644
index 0000000..10846f5
--- /dev/null
+++ b/tests/panels/test_sql.py
@@ -0,0 +1,73 @@
+# coding: utf-8
+
+from __future__ import unicode_literals
+
+from django.contrib.auth.models import User
+from django.db import connection
+from django.db.utils import DatabaseError
+from django.utils import unittest
+
+from debug_toolbar.panels.sql import SQLDebugPanel
+
+from ..base import BaseTestCase
+
+
+class SQLPanelTestCase(BaseTestCase):
+
+ def test_recording(self):
+ panel = self.toolbar.get_panel(SQLDebugPanel)
+ self.assertEqual(len(panel._queries), 0)
+
+ list(User.objects.all())
+
+ # ensure query was logged
+ self.assertEqual(len(panel._queries), 1)
+ query = panel._queries[0]
+ self.assertEqual(query[0], 'default')
+ self.assertTrue('sql' in query[1])
+ self.assertTrue('duration' in query[1])
+ self.assertTrue('stacktrace' in query[1])
+
+ # ensure the stacktrace is populated
+ self.assertTrue(len(query[1]['stacktrace']) > 0)
+
+ def test_non_ascii_query(self):
+ panel = self.toolbar.get_panel(SQLDebugPanel)
+ self.assertEqual(len(panel._queries), 0)
+
+ # non-ASCII query
+ list(User.objects.extra(where=["username = 'café'"]))
+ self.assertEqual(len(panel._queries), 1)
+
+ # non-ASCII parameters
+ list(User.objects.filter(username='café'))
+ self.assertEqual(len(panel._queries), 2)
+
+ @unittest.skipUnless(connection.vendor == 'postgresql',
+ 'Test valid only on PostgreSQL')
+ def test_erroneous_query(self):
+ """
+ Test that an error in the query isn't swallowed by the middleware.
+ """
+ try:
+ connection.cursor().execute("erroneous query")
+ except DatabaseError as e:
+ self.assertTrue('erroneous query' in str(e))
+
+ def test_disable_stacktraces(self):
+ panel = self.toolbar.get_panel(SQLDebugPanel)
+ self.assertEqual(len(panel._queries), 0)
+
+ with self.settings(DEBUG_TOOLBAR_CONFIG={'ENABLE_STACKTRACES': False}):
+ list(User.objects.all())
+
+ # ensure query was logged
+ self.assertEqual(len(panel._queries), 1)
+ query = panel._queries[0]
+ self.assertEqual(query[0], 'default')
+ self.assertTrue('sql' in query[1])
+ self.assertTrue('duration' in query[1])
+ self.assertTrue('stacktrace' in query[1])
+
+ # ensure the stacktrace is empty
+ self.assertEqual([], query[1]['stacktrace'])
diff --git a/tests/panels/test_template.py b/tests/panels/test_template.py
new file mode 100644
index 0000000..4e30a73
--- /dev/null
+++ b/tests/panels/test_template.py
@@ -0,0 +1,31 @@
+from __future__ import unicode_literals
+
+import django
+from django.contrib.auth.models import User
+from django.template import Template, Context
+
+from debug_toolbar.panels.template import TemplateDebugPanel
+from debug_toolbar.panels.sql import SQLDebugPanel
+
+from ..base import BaseTestCase
+
+
+class TemplateDebugPanelTestCase(BaseTestCase):
+
+ def test_queryset_hook(self):
+ template_panel = self.toolbar.get_panel(TemplateDebugPanel)
+ sql_panel = self.toolbar.get_panel(SQLDebugPanel)
+ t = Template("No context variables here!")
+ c = Context({
+ 'queryset': User.objects.all(),
+ 'deep_queryset': {
+ 'queryset': User.objects.all(),
+ }
+ })
+ t.render(c)
+ # ensure the query was NOT logged
+ self.assertEqual(len(sql_panel._queries), 0)
+ base_ctx_idx = 1 if django.VERSION[:2] >= (1, 5) else 0
+ ctx = template_panel.templates[0]['context'][base_ctx_idx]
+ self.assertIn('<<queryset of auth.User>>', ctx)
+ self.assertIn('<<triggers database query>>', ctx)