Avoided transaction.set_autocommit in tests.

It doesn't work as one might expect on a certain database backend where
autocommits_when_autocommit_is_off = True. That backend happens to be
popular for running tests.
This commit is contained in:
Aymeric Augustin 2013-07-09 21:12:51 +02:00
parent 6157192b6e
commit 38bc581bc0
3 changed files with 21 additions and 49 deletions

View File

@ -641,8 +641,7 @@ class FkConstraintsTests(TransactionTestCase):
""" """
When constraint checks are disabled, should be able to write bad data without IntegrityErrors. When constraint checks are disabled, should be able to write bad data without IntegrityErrors.
""" """
transaction.set_autocommit(False) with transaction.atomic():
try:
# Create an Article. # Create an Article.
models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r) models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
# Retrive it from the DB # Retrive it from the DB
@ -654,17 +653,13 @@ class FkConstraintsTests(TransactionTestCase):
connection.enable_constraint_checking() connection.enable_constraint_checking()
except IntegrityError: except IntegrityError:
self.fail("IntegrityError should not have occurred.") self.fail("IntegrityError should not have occurred.")
finally: transaction.set_rollback(True)
transaction.rollback()
finally:
transaction.set_autocommit(True)
def test_disable_constraint_checks_context_manager(self): def test_disable_constraint_checks_context_manager(self):
""" """
When constraint checks are disabled (using context manager), should be able to write bad data without IntegrityErrors. When constraint checks are disabled (using context manager), should be able to write bad data without IntegrityErrors.
""" """
transaction.set_autocommit(False) with transaction.atomic():
try:
# Create an Article. # Create an Article.
models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r) models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
# Retrive it from the DB # Retrive it from the DB
@ -675,31 +670,23 @@ class FkConstraintsTests(TransactionTestCase):
a.save() a.save()
except IntegrityError: except IntegrityError:
self.fail("IntegrityError should not have occurred.") self.fail("IntegrityError should not have occurred.")
finally: transaction.set_rollback(True)
transaction.rollback()
finally:
transaction.set_autocommit(True)
def test_check_constraints(self): def test_check_constraints(self):
""" """
Constraint checks should raise an IntegrityError when bad data is in the DB. Constraint checks should raise an IntegrityError when bad data is in the DB.
""" """
try: with transaction.atomic():
transaction.set_autocommit(False)
# Create an Article. # Create an Article.
models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r) models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
# Retrive it from the DB # Retrive it from the DB
a = models.Article.objects.get(headline="Test article") a = models.Article.objects.get(headline="Test article")
a.reporter_id = 30 a.reporter_id = 30
try: with connection.constraint_checks_disabled():
with connection.constraint_checks_disabled(): a.save()
a.save() with self.assertRaises(IntegrityError):
with self.assertRaises(IntegrityError): connection.check_constraints()
connection.check_constraints() transaction.set_rollback(True)
finally:
transaction.rollback()
finally:
transaction.set_autocommit(True)
class ThreadTests(TestCase): class ThreadTests(TestCase):

View File

@ -30,8 +30,7 @@ class TestNoInitialDataLoading(TransactionTestCase):
available_apps = ['fixtures_model_package'] available_apps = ['fixtures_model_package']
def test_syncdb(self): def test_syncdb(self):
transaction.set_autocommit(False) with transaction.atomic():
try:
Book.objects.all().delete() Book.objects.all().delete()
management.call_command( management.call_command(
@ -40,9 +39,6 @@ class TestNoInitialDataLoading(TransactionTestCase):
load_initial_data=False load_initial_data=False
) )
self.assertQuerysetEqual(Book.objects.all(), []) self.assertQuerysetEqual(Book.objects.all(), [])
transaction.rollback()
finally:
transaction.set_autocommit(True)
def test_flush(self): def test_flush(self):
@ -54,8 +50,7 @@ class TestNoInitialDataLoading(TransactionTestCase):
lambda a: a.name lambda a: a.name
) )
transaction.set_autocommit(False) with transaction.atomic():
try:
management.call_command( management.call_command(
'flush', 'flush',
verbosity=0, verbosity=0,
@ -63,9 +58,6 @@ class TestNoInitialDataLoading(TransactionTestCase):
load_initial_data=False load_initial_data=False
) )
self.assertQuerysetEqual(Book.objects.all(), []) self.assertQuerysetEqual(Book.objects.all(), [])
transaction.rollback()
finally:
transaction.set_autocommit(True)
class FixtureTestCase(TestCase): class FixtureTestCase(TestCase):

View File

@ -660,22 +660,15 @@ class TestTicket11101(TransactionTestCase):
'django.contrib.contenttypes', 'django.contrib.contenttypes',
] ]
def ticket_11101(self):
management.call_command(
'loaddata',
'thingy.json',
verbosity=0,
)
self.assertEqual(Thingy.objects.count(), 1)
transaction.rollback()
self.assertEqual(Thingy.objects.count(), 0)
transaction.commit()
@skipUnlessDBFeature('supports_transactions') @skipUnlessDBFeature('supports_transactions')
def test_ticket_11101(self): def test_ticket_11101(self):
"""Test that fixtures can be rolled back (ticket #11101).""" """Test that fixtures can be rolled back (ticket #11101)."""
transaction.set_autocommit(False) with transaction.atomic():
try: management.call_command(
self.ticket_11101() 'loaddata',
finally: 'thingy.json',
transaction.set_autocommit(True) verbosity=0,
)
self.assertEqual(Thingy.objects.count(), 1)
transaction.set_rollback(True)
self.assertEqual(Thingy.objects.count(), 0)