|
1 import sys |
|
2 |
|
3 from django.test import TestCase |
|
4 from django.core.signals import got_request_exception |
|
5 |
|
6 class TestException(Exception): |
|
7 pass |
|
8 |
|
9 class TestMiddleware(object): |
|
10 def process_request(self, request): |
|
11 raise TestException('Test Exception') |
|
12 |
|
13 class MiddlewareExceptionTest(TestCase): |
|
14 def setUp(self): |
|
15 self.exceptions = [] |
|
16 got_request_exception.connect(self._on_request_exception) |
|
17 self.client.handler.load_middleware() |
|
18 |
|
19 def tearDown(self): |
|
20 got_request_exception.disconnect(self._on_request_exception) |
|
21 self.exceptions = [] |
|
22 |
|
23 def _on_request_exception(self, sender, request, **kwargs): |
|
24 self.exceptions.append(sys.exc_info()) |
|
25 |
|
26 def test_process_request(self): |
|
27 self.client.handler._request_middleware.insert(0, TestMiddleware().process_request) |
|
28 try: |
|
29 response = self.client.get('/') |
|
30 except TestException, e: |
|
31 # Test client indefinitely re-raises any exceptions being raised |
|
32 # during request handling. Hence actual testing that exception was |
|
33 # properly handled is done by relying on got_request_exception |
|
34 # signal being sent. |
|
35 pass |
|
36 except Exception, e: |
|
37 self.fail("Unexpected exception: %s" % e) |
|
38 self.assertEquals(len(self.exceptions), 1) |
|
39 exception, value, tb = self.exceptions[0] |
|
40 self.assertEquals(value.args, ('Test Exception', )) |