diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2013-02-05 23:52:29 +0200 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-02-10 14:09:58 +0200 |
| commit | 60186aa2e5db5900b96cbc3dac0ad23b72a37e80 (patch) | |
| tree | 2bedb9e320b422b8941f2805528d61aba0c01812 /tests/regressiontests/middleware | |
| parent | 4c261c61f21bae4dc72e1ec2dffbce94a3603d73 (diff) | |
[1.5.x] Fixed #19707 -- Reset transaction state after requests
Backpatch of a4e97cf315142e61bb4bc3ed8259b95d8586d09c
Diffstat (limited to 'tests/regressiontests/middleware')
| -rw-r--r-- | tests/regressiontests/middleware/tests.py | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/tests/regressiontests/middleware/tests.py b/tests/regressiontests/middleware/tests.py index 231328b163..b64d62e5ef 100644 --- a/tests/regressiontests/middleware/tests.py +++ b/tests/regressiontests/middleware/tests.py @@ -8,9 +8,9 @@ from io import BytesIO from django.conf import settings from django.core import mail -from django.db import transaction -from django.http import HttpRequest -from django.http import HttpResponse, StreamingHttpResponse +from django.db import (transaction, connections, DEFAULT_DB_ALIAS, + IntegrityError) +from django.http import HttpRequest, HttpResponse, StreamingHttpResponse from django.middleware.clickjacking import XFrameOptionsMiddleware from django.middleware.common import CommonMiddleware from django.middleware.http import ConditionalGetMiddleware @@ -712,3 +712,22 @@ class TransactionMiddlewareTest(TransactionTestCase): TransactionMiddleware().process_exception(self.request, None) self.assertEqual(Band.objects.count(), 0) self.assertFalse(transaction.is_dirty()) + + def test_failing_commit(self): + # It is possible that connection.commit() fails. Check that + # TransactionMiddleware handles such cases correctly. + try: + def raise_exception(): + raise IntegrityError() + connections[DEFAULT_DB_ALIAS].commit = raise_exception + transaction.enter_transaction_management() + transaction.managed(True) + Band.objects.create(name='The Beatles') + self.assertTrue(transaction.is_dirty()) + with self.assertRaises(IntegrityError): + TransactionMiddleware().process_response(self.request, None) + self.assertEqual(Band.objects.count(), 0) + self.assertFalse(transaction.is_dirty()) + self.assertFalse(transaction.is_managed()) + finally: + del connections[DEFAULT_DB_ALIAS].commit |
