mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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.
Backport of 38bc581bc0 from master.
			
			
This commit is contained in:
		| @@ -640,8 +640,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 | ||||||
| @@ -653,17 +652,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 | ||||||
| @@ -674,31 +669,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() | ||||||
|             finally: |             transaction.set_rollback(True) | ||||||
|                 transaction.rollback() |  | ||||||
|         finally: |  | ||||||
|             transaction.set_autocommit(True) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class ThreadTests(TestCase): | class ThreadTests(TestCase): | ||||||
|   | |||||||
| @@ -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): | ||||||
|   | |||||||
| @@ -660,22 +660,15 @@ class TestTicket11101(TransactionTestCase): | |||||||
|         'django.contrib.contenttypes', |         'django.contrib.contenttypes', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def ticket_11101(self): |     @skipUnlessDBFeature('supports_transactions') | ||||||
|  |     def test_ticket_11101(self): | ||||||
|  |         """Test that fixtures can be rolled back (ticket #11101).""" | ||||||
|  |         with transaction.atomic(): | ||||||
|             management.call_command( |             management.call_command( | ||||||
|                 'loaddata', |                 'loaddata', | ||||||
|                 'thingy.json', |                 'thingy.json', | ||||||
|                 verbosity=0, |                 verbosity=0, | ||||||
|             ) |             ) | ||||||
|             self.assertEqual(Thingy.objects.count(), 1) |             self.assertEqual(Thingy.objects.count(), 1) | ||||||
|         transaction.rollback() |             transaction.set_rollback(True) | ||||||
|         self.assertEqual(Thingy.objects.count(), 0) |         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) |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user