summaryrefslogtreecommitdiff
path: root/parts/django/tests/regressiontests/middleware_exceptions/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'parts/django/tests/regressiontests/middleware_exceptions/tests.py')
-rw-r--r--parts/django/tests/regressiontests/middleware_exceptions/tests.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/parts/django/tests/regressiontests/middleware_exceptions/tests.py b/parts/django/tests/regressiontests/middleware_exceptions/tests.py
new file mode 100644
index 0000000..3d9c5f6
--- /dev/null
+++ b/parts/django/tests/regressiontests/middleware_exceptions/tests.py
@@ -0,0 +1,40 @@
+import sys
+
+from django.test import TestCase
+from django.core.signals import got_request_exception
+
+class TestException(Exception):
+ pass
+
+class TestMiddleware(object):
+ def process_request(self, request):
+ raise TestException('Test Exception')
+
+class MiddlewareExceptionTest(TestCase):
+ def setUp(self):
+ self.exceptions = []
+ got_request_exception.connect(self._on_request_exception)
+ self.client.handler.load_middleware()
+
+ def tearDown(self):
+ got_request_exception.disconnect(self._on_request_exception)
+ self.exceptions = []
+
+ def _on_request_exception(self, sender, request, **kwargs):
+ self.exceptions.append(sys.exc_info())
+
+ def test_process_request(self):
+ self.client.handler._request_middleware.insert(0, TestMiddleware().process_request)
+ try:
+ response = self.client.get('/')
+ except TestException, e:
+ # Test client indefinitely re-raises any exceptions being raised
+ # during request handling. Hence actual testing that exception was
+ # properly handled is done by relying on got_request_exception
+ # signal being sent.
+ pass
+ except Exception, e:
+ self.fail("Unexpected exception: %s" % e)
+ self.assertEquals(len(self.exceptions), 1)
+ exception, value, tb = self.exceptions[0]
+ self.assertEquals(value.args, ('Test Exception', ))