From ddac484aa76176cc9cb783bd6137c85fa3e7ff0a Mon Sep 17 00:00:00 2001 From: Bouke Haarsma Date: Fri, 18 Oct 2013 11:00:20 +0200 Subject: #151 -- Logging panel fails on invalid string representations --- tests/tests.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'tests') diff --git a/tests/tests.py b/tests/tests.py index 1571800..aac41bd 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals +import logging import threading import django @@ -15,6 +16,8 @@ from django.utils import six from django.utils import unittest from debug_toolbar.middleware import DebugToolbarMiddleware +from debug_toolbar.panels.logger import (LoggingPanel, + MESSAGE_IF_STRING_REPRESENTATION_INVALID) from debug_toolbar.panels.sql import SQLDebugPanel from debug_toolbar.panels.request_vars import RequestVarsDebugPanel from debug_toolbar.panels.template import TemplateDebugPanel @@ -287,3 +290,47 @@ class TemplatePanelTestCase(BaseTestCase): ctx = template_panel.templates[0]['context'][base_ctx_idx] self.assertIn('<>', ctx) self.assertIn('<>', ctx) + + +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']) -- cgit v1.2.3