diff options
| author | Paveł Tyślacki <pavel.tyslacki@gmail.com> | 2019-01-16 00:14:20 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2019-01-28 11:51:23 -0500 |
| commit | 62b8596616ea46849e29ca77a77e1196417dc1f9 (patch) | |
| tree | 93b152009e4d8dd299b51355f88a4a7f27cd1d44 | |
| parent | 7785e03ba89aafbd949191f126361fb9103cb980 (diff) | |
Made test table cleanup in OperationTestBase more robust.
Some non-unique constraint names were added in
b69f8eb04cc8762d3dfd5af5ea1fc58e3f2ebcc3 which resulted in failures
depending on the order in which tests were run.
| -rw-r--r-- | tests/migrations/test_multidb.py | 18 | ||||
| -rw-r--r-- | tests/migrations/test_operations.py | 38 |
2 files changed, 30 insertions, 26 deletions
diff --git a/tests/migrations/test_multidb.py b/tests/migrations/test_multidb.py index b2c4320ad3..e0c5a4d3c5 100644 --- a/tests/migrations/test_multidb.py +++ b/tests/migrations/test_multidb.py @@ -122,13 +122,16 @@ class MultiDBOperationTests(OperationTestBase): self.assertEqual(Pony.objects.count(), 0) @override_settings(DATABASE_ROUTERS=[MigrateNothingRouter()]) - def test_run_sql(self): + def test_run_sql_migrate_nothing_router(self): self._test_run_sql("test_mltdb_runsql", should_run=False) @override_settings(DATABASE_ROUTERS=[MigrateWhenFooRouter()]) - def test_run_sql2(self): + def test_run_sql_migrate_foo_router_without_hints(self): self._test_run_sql("test_mltdb_runsql2", should_run=False) - self._test_run_sql("test_mltdb_runsql2", should_run=True, hints={'foo': True}) + + @override_settings(DATABASE_ROUTERS=[MigrateWhenFooRouter()]) + def test_run_sql_migrate_foo_router_with_hints(self): + self._test_run_sql('test_mltdb_runsql3', should_run=True, hints={'foo': True}) def _test_run_python(self, app_label, should_run, hints=None): with override_settings(DATABASE_ROUTERS=[MigrateEverythingRouter()]): @@ -156,10 +159,13 @@ class MultiDBOperationTests(OperationTestBase): self.assertEqual(Pony.objects.count(), 0) @override_settings(DATABASE_ROUTERS=[MigrateNothingRouter()]) - def test_run_python(self): + def test_run_python_migrate_nothing_router(self): self._test_run_python("test_mltdb_runpython", should_run=False) @override_settings(DATABASE_ROUTERS=[MigrateWhenFooRouter()]) - def test_run_python2(self): + def test_run_python_migrate_foo_router_without_hints(self): self._test_run_python("test_mltdb_runpython2", should_run=False) - self._test_run_python("test_mltdb_runpython2", should_run=True, hints={'foo': True}) + + @override_settings(DATABASE_ROUTERS=[MigrateWhenFooRouter()]) + def test_run_python_migrate_foo_router_with_hints(self): + self._test_run_python('test_mltdb_runpython3', should_run=True, hints={'foo': True}) diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index e6d0c4bce4..d5c8396596 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -22,6 +22,24 @@ class OperationTestBase(MigrationTestBase): Common functions to help test operations. """ + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._initial_table_names = frozenset(connection.introspection.table_names()) + + def tearDown(self): + self.cleanup_test_tables() + super().tearDown() + + def cleanup_test_tables(self): + table_names = frozenset(connection.introspection.table_names()) - self._initial_table_names + with connection.schema_editor() as editor: + with connection.constraint_checks_disabled(): + for table_name in table_names: + editor.execute(editor.sql_delete_table % { + 'table': editor.quote_name(table_name), + }) + def apply_operations(self, app_label, project_state, operations, atomic=True): migration = Migration('name', app_label) migration.operations = operations @@ -51,26 +69,6 @@ class OperationTestBase(MigrationTestBase): """ Creates a test model state and database table. """ - # Delete the tables if they already exist - table_names = [ - # Start with ManyToMany tables - '_pony_stables', '_pony_vans', - # Then standard model tables - '_pony', '_stable', '_van', - ] - tables = [(app_label + table_name) for table_name in table_names] - with connection.cursor() as cursor: - table_names = connection.introspection.table_names(cursor) - connection.disable_constraint_checking() - sql_delete_table = connection.schema_editor().sql_delete_table - with transaction.atomic(): - for table in tables: - if table in table_names: - cursor.execute(sql_delete_table % { - "table": connection.ops.quote_name(table), - }) - connection.enable_constraint_checking() - # Make the "current" state model_options = { "swappable": "TEST_SWAP_MODEL", |
