Skip to content

Commit

Permalink
Avoided transaction.set_autocommit in tests.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
aaugustin committed Jul 9, 2013
1 parent 6157192 commit 38bc581
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 49 deletions.
33 changes: 10 additions & 23 deletions tests/backends/tests.py
Expand Up @@ -641,8 +641,7 @@ def test_disable_constraint_checks_manually(self):
"""
When constraint checks are disabled, should be able to write bad data without IntegrityErrors.
"""
transaction.set_autocommit(False)
try:
with transaction.atomic():
# Create an Article.
models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
# Retrive it from the DB
Expand All @@ -654,17 +653,13 @@ def test_disable_constraint_checks_manually(self):
connection.enable_constraint_checking()
except IntegrityError:
self.fail("IntegrityError should not have occurred.")
finally:
transaction.rollback()
finally:
transaction.set_autocommit(True)
transaction.set_rollback(True)

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.
"""
transaction.set_autocommit(False)
try:
with transaction.atomic():
# Create an Article.
models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
# Retrive it from the DB
Expand All @@ -675,31 +670,23 @@ def test_disable_constraint_checks_context_manager(self):
a.save()
except IntegrityError:
self.fail("IntegrityError should not have occurred.")
finally:
transaction.rollback()
finally:
transaction.set_autocommit(True)
transaction.set_rollback(True)

def test_check_constraints(self):
"""
Constraint checks should raise an IntegrityError when bad data is in the DB.
"""
try:
transaction.set_autocommit(False)
with transaction.atomic():
# Create an Article.
models.Article.objects.create(headline="Test article", pub_date=datetime.datetime(2010, 9, 4), reporter=self.r)
# Retrive it from the DB
a = models.Article.objects.get(headline="Test article")
a.reporter_id = 30
try:
with connection.constraint_checks_disabled():
a.save()
with self.assertRaises(IntegrityError):
connection.check_constraints()
finally:
transaction.rollback()
finally:
transaction.set_autocommit(True)
with connection.constraint_checks_disabled():
a.save()
with self.assertRaises(IntegrityError):
connection.check_constraints()
transaction.set_rollback(True)


class ThreadTests(TestCase):
Expand Down
12 changes: 2 additions & 10 deletions tests/fixtures_model_package/tests.py
Expand Up @@ -30,8 +30,7 @@ class TestNoInitialDataLoading(TransactionTestCase):
available_apps = ['fixtures_model_package']

def test_syncdb(self):
transaction.set_autocommit(False)
try:
with transaction.atomic():
Book.objects.all().delete()

management.call_command(
Expand All @@ -40,9 +39,6 @@ def test_syncdb(self):
load_initial_data=False
)
self.assertQuerysetEqual(Book.objects.all(), [])
transaction.rollback()
finally:
transaction.set_autocommit(True)


def test_flush(self):
Expand All @@ -54,18 +50,14 @@ def test_flush(self):
lambda a: a.name
)

transaction.set_autocommit(False)
try:
with transaction.atomic():
management.call_command(
'flush',
verbosity=0,
interactive=False,
load_initial_data=False
)
self.assertQuerysetEqual(Book.objects.all(), [])
transaction.rollback()
finally:
transaction.set_autocommit(True)


class FixtureTestCase(TestCase):
Expand Down
25 changes: 9 additions & 16 deletions tests/fixtures_regress/tests.py
Expand Up @@ -660,22 +660,15 @@ class TestTicket11101(TransactionTestCase):
'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')
def test_ticket_11101(self):
"""Test that fixtures can be rolled back (ticket #11101)."""
transaction.set_autocommit(False)
try:
self.ticket_11101()
finally:
transaction.set_autocommit(True)
with transaction.atomic():
management.call_command(
'loaddata',
'thingy.json',
verbosity=0,
)
self.assertEqual(Thingy.objects.count(), 1)
transaction.set_rollback(True)
self.assertEqual(Thingy.objects.count(), 0)

0 comments on commit 38bc581

Please sign in to comment.