From 9a82eb6ff109e95dbb6cf26ee3d2ce1c548714bb Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Tue, 1 Feb 2011 14:18:07 +0000 Subject: Fixed #14972 -- Ensure that the HTML email logger always produces useful output, regardless of whether it has been given an exception or a request. Thanks to jamstooks for the report, and bpeschier for the initial patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15383 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/regressiontests/views/tests/debug.py | 89 +++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/regressiontests/views/tests/debug.py b/tests/regressiontests/views/tests/debug.py index c71e8c502d..0b07b406d0 100644 --- a/tests/regressiontests/views/tests/debug.py +++ b/tests/regressiontests/views/tests/debug.py @@ -1,13 +1,16 @@ import inspect +import sys from django.conf import settings from django.core.files.uploadedfile import SimpleUploadedFile -from django.test import TestCase +from django.test import TestCase, RequestFactory from django.core.urlresolvers import reverse from django.template import TemplateSyntaxError +from django.views.debug import ExceptionReporter from regressiontests.views import BrokenException, except_args + class DebugViewTests(TestCase): def setUp(self): self.old_debug = settings.DEBUG @@ -52,3 +55,87 @@ class DebugViewTests(TestCase): def test_template_loader_postmortem(self): response = self.client.get(reverse('raises_template_does_not_exist')) self.assertContains(response, 'templates/i_dont_exist.html (File does not exist)', status_code=500) + + +class ExceptionReporterTests(TestCase): + rf = RequestFactory() + + def test_request_and_exception(self): + "A simple exception report can be generated" + try: + request = self.rf.get('/test_view/') + raise KeyError("Can't find my keys") + except KeyError: + exc_type, exc_value, tb = sys.exc_info() + reporter = ExceptionReporter(request, exc_type, exc_value, tb) + html = reporter.get_traceback_html() + self.assertIn('

KeyError at /test_view/

', html) + self.assertIn('
Can't find my keys
', html) + self.assertIn('Request Method:', html) + self.assertIn('Request URL:', html) + self.assertIn('Exception Type:', html) + self.assertIn('Exception Value:', html) + self.assertIn('

Traceback ', html) + self.assertIn('

Request information

', html) + self.assertNotIn('

Request data not supplied

', html) + + def test_no_request(self): + "An exception report can be generated without request" + try: + raise KeyError("Can't find my keys") + except KeyError: + exc_type, exc_value, tb = sys.exc_info() + reporter = ExceptionReporter(None, exc_type, exc_value, tb) + html = reporter.get_traceback_html() + self.assertIn('

KeyError

', html) + self.assertIn('
Can't find my keys
', html) + self.assertNotIn('Request Method:', html) + self.assertNotIn('Request URL:', html) + self.assertIn('Exception Type:', html) + self.assertIn('Exception Value:', html) + self.assertIn('

Traceback ', html) + self.assertIn('

Request information

', html) + self.assertIn('

Request data not supplied

', html) + + def test_no_exception(self): + "An exception report can be generated for just a request" + request = self.rf.get('/test_view/') + reporter = ExceptionReporter(request, None, None, None) + html = reporter.get_traceback_html() + self.assertIn('

Report at /test_view/

', html) + self.assertIn('
No exception supplied
', html) + self.assertIn('Request Method:', html) + self.assertIn('Request URL:', html) + self.assertNotIn('Exception Type:', html) + self.assertNotIn('Exception Value:', html) + self.assertNotIn('

Traceback ', html) + self.assertIn('

Request information

', html) + self.assertNotIn('

Request data not supplied

', html) + + def test_request_and_message(self): + "A message can be provided in addition to a request" + request = self.rf.get('/test_view/') + reporter = ExceptionReporter(request, None, "I'm a little teapot", None) + html = reporter.get_traceback_html() + self.assertIn('

Report at /test_view/

', html) + self.assertIn('
I'm a little teapot
', html) + self.assertIn('Request Method:', html) + self.assertIn('Request URL:', html) + self.assertNotIn('Exception Type:', html) + self.assertNotIn('Exception Value:', html) + self.assertNotIn('

Traceback ', html) + self.assertIn('

Request information

', html) + self.assertNotIn('

Request data not supplied

', html) + + def test_message_only(self): + reporter = ExceptionReporter(None, None, "I'm a little teapot", None) + html = reporter.get_traceback_html() + self.assertIn('

Report

', html) + self.assertIn('
I'm a little teapot
', html) + self.assertNotIn('Request Method:', html) + self.assertNotIn('Request URL:', html) + self.assertNotIn('Exception Type:', html) + self.assertNotIn('Exception Value:', html) + self.assertNotIn('

Traceback ', html) + self.assertIn('

Request information

', html) + self.assertIn('

Request data not supplied

', html) -- cgit v1.3