diff options
Diffstat (limited to 'parts/django/tests/regressiontests/middleware_exceptions/tests.py')
-rw-r--r-- | parts/django/tests/regressiontests/middleware_exceptions/tests.py | 40 |
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', )) |