summaryrefslogtreecommitdiff
path: root/tests/regressiontests/middleware
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-02-05 23:52:29 +0200
committerAnssi Kääriäinen <akaariai@gmail.com>2013-02-10 14:09:58 +0200
commit60186aa2e5db5900b96cbc3dac0ad23b72a37e80 (patch)
tree2bedb9e320b422b8941f2805528d61aba0c01812 /tests/regressiontests/middleware
parent4c261c61f21bae4dc72e1ec2dffbce94a3603d73 (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.py25
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