1
0
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:
Anssi Kääriäinen
2013-02-05 23:52:29 +02:00
parent 498a5de07b
commit 9918b3f502
8 changed files with 119 additions and 4 deletions

View File

@@ -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