mirror of
https://github.com/django/django.git
synced 2025-10-26 07:06:08 +00:00
[1.4.x] Fixed #19707 -- Reset transaction state after requests
Backpatch of a4e97cf315.
This commit is contained in:
@@ -8,7 +8,8 @@ import StringIO
|
||||
|
||||
from django.conf import settings
|
||||
from django.core import mail
|
||||
from django.db import transaction
|
||||
from django.db import (transaction, connections, DEFAULT_DB_ALIAS,
|
||||
IntegrityError)
|
||||
from django.http import HttpRequest
|
||||
from django.http import HttpResponse
|
||||
from django.middleware.clickjacking import XFrameOptionsMiddleware
|
||||
@@ -660,3 +661,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
|
||||
|
||||
Reference in New Issue
Block a user