1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- from unittest import mock
- from django.db import connections
- from django.test import TestCase, TransactionTestCase, override_settings
- from django.test.testcases import DatabaseOperationForbidden
- from .models import Car, Person
- class TestSerializedRollbackInhibitsPostMigrate(TransactionTestCase):
- """
- TransactionTestCase._fixture_teardown() inhibits the post_migrate signal
- for test classes with serialized_rollback=True.
- """
- available_apps = ["test_utils"]
- serialized_rollback = True
- def setUp(self):
- # self.available_apps must be None to test the serialized_rollback
- # condition.
- self.available_apps = None
- def tearDown(self):
- self.available_apps = ["test_utils"]
- @mock.patch("django.test.testcases.call_command")
- def test(self, call_command):
- # with a mocked call_command(), this doesn't have any effect.
- self._fixture_teardown()
- call_command.assert_called_with(
- "flush",
- interactive=False,
- allow_cascade=False,
- reset_sequences=False,
- inhibit_post_migrate=True,
- database="default",
- verbosity=0,
- )
- @override_settings(DEBUG=True) # Enable query logging for test_queries_cleared
- class TransactionTestCaseDatabasesTests(TestCase):
- available_apps = []
- databases = {"default", "other"}
- def test_queries_cleared(self):
- """
- TransactionTestCase._pre_setup() clears the connections' queries_log
- so that it's less likely to overflow. An overflow causes
- assertNumQueries() to fail.
- """
- for alias in self.databases:
- self.assertEqual(
- len(connections[alias].queries_log), 0, "Failed for alias %s" % alias
- )
- class DisallowedDatabaseQueriesTests(TransactionTestCase):
- available_apps = ["test_utils"]
- def test_disallowed_database_queries(self):
- message = (
- "Database queries to 'other' are not allowed in this test. "
- "Add 'other' to test_utils.test_transactiontestcase."
- "DisallowedDatabaseQueriesTests.databases to ensure proper test "
- "isolation and silence this failure."
- )
- with self.assertRaisesMessage(DatabaseOperationForbidden, message):
- Car.objects.using("other").get()
- class FixtureAvailableInSetUpClassTest(TransactionTestCase):
- available_apps = ["test_utils"]
- fixtures = ["person.json"]
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
- cls.elvis = Person.objects.get(name="Elvis Presley")
- def test_fixture_loaded_during_class_setup(self):
- self.assertIsInstance(self.elvis, Person)
|