Loading tests/schema/tests.py +28 −31 Original line number Diff line number Diff line Loading @@ -63,26 +63,14 @@ class SchemaTests(TransactionTestCase): def delete_tables(self): "Deletes all model tables for our models for a clean test environment" converter = connection.introspection.table_name_converter with connection.cursor() as cursor: with atomic(): connection.disable_constraint_checking() table_names = connection.introspection.table_names(cursor) table_names = connection.introspection.table_names() for model in itertools.chain(SchemaTests.models, self.local_models): # Remove any M2M tables first for field in model._meta.local_many_to_many: with atomic(): tbl = converter(field.rel.through._meta.db_table) if tbl in table_names: cursor.execute(connection.schema_editor().sql_delete_table % { "table": connection.ops.quote_name(tbl), }) table_names.remove(tbl) # Then remove the main tables with atomic(): tbl = converter(model._meta.db_table) if tbl in table_names: cursor.execute(connection.schema_editor().sql_delete_table % { "table": connection.ops.quote_name(tbl), }) with connection.schema_editor() as editor: editor.delete_model(model) table_names.remove(tbl) connection.enable_constraint_checking() Loading Loading @@ -841,11 +829,7 @@ class SchemaTests(TransactionTestCase): class Meta: app_label = 'schema' apps = new_apps self.local_models = [ LocalBookWithM2M, LocalBookWithM2M._meta.get_field('tags').rel.through, ] self.local_models = [LocalBookWithM2M] # Create the tables with connection.schema_editor() as editor: editor.create_model(Author) Loading Loading @@ -924,7 +908,6 @@ class SchemaTests(TransactionTestCase): # Create an M2M field new_field = M2MFieldClass("schema.TagM2MTest", related_name="authors") new_field.contribute_to_class(LocalAuthorWithM2M, "tags") self.local_models += [new_field.rel.through] # Ensure there's no m2m table there self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through) # Add the field Loading @@ -944,6 +927,14 @@ class SchemaTests(TransactionTestCase): # Ensure there's no m2m table there self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through) # Need to tear down using a model without the added M2M field that's # been removed. class LocalAuthorWithM2M(Model): class Meta: app_label = 'schema' apps = new_apps self.local_models = [LocalAuthorWithM2M] def test_m2m(self): self._test_m2m(ManyToManyField) Loading Loading @@ -1014,10 +1005,7 @@ class SchemaTests(TransactionTestCase): app_label = 'schema' apps = new_apps self.local_models = [ LocalBookWithM2M, LocalBookWithM2M._meta.get_field('tags').rel.through, ] self.local_models = [LocalBookWithM2M] # Create the tables with connection.schema_editor() as editor: Loading @@ -1038,11 +1026,20 @@ class SchemaTests(TransactionTestCase): old_field = LocalBookWithM2M._meta.get_field("tags") new_field = M2MFieldClass(UniqueTest) new_field.contribute_to_class(LocalBookWithM2M, "uniques") self.local_models += [new_field.rel.through] with connection.schema_editor() as editor: editor.alter_field(LocalBookWithM2M, old_field, new_field) # Ensure old M2M is gone self.assertRaises(DatabaseError, self.column_classes, LocalBookWithM2M._meta.get_field("tags").rel.through) # This model looks like the new model and is used for teardown. class LocalBookWithM2M(Model): uniques = M2MFieldClass(UniqueTest) class Meta: app_label = 'schema' apps = new_apps self.local_models = [LocalBookWithM2M] # Ensure the new M2M exists and points to UniqueTest constraints = self.get_constraints(new_field.rel.through._meta.db_table) if connection.features.supports_foreign_keys: Loading Loading
tests/schema/tests.py +28 −31 Original line number Diff line number Diff line Loading @@ -63,26 +63,14 @@ class SchemaTests(TransactionTestCase): def delete_tables(self): "Deletes all model tables for our models for a clean test environment" converter = connection.introspection.table_name_converter with connection.cursor() as cursor: with atomic(): connection.disable_constraint_checking() table_names = connection.introspection.table_names(cursor) table_names = connection.introspection.table_names() for model in itertools.chain(SchemaTests.models, self.local_models): # Remove any M2M tables first for field in model._meta.local_many_to_many: with atomic(): tbl = converter(field.rel.through._meta.db_table) if tbl in table_names: cursor.execute(connection.schema_editor().sql_delete_table % { "table": connection.ops.quote_name(tbl), }) table_names.remove(tbl) # Then remove the main tables with atomic(): tbl = converter(model._meta.db_table) if tbl in table_names: cursor.execute(connection.schema_editor().sql_delete_table % { "table": connection.ops.quote_name(tbl), }) with connection.schema_editor() as editor: editor.delete_model(model) table_names.remove(tbl) connection.enable_constraint_checking() Loading Loading @@ -841,11 +829,7 @@ class SchemaTests(TransactionTestCase): class Meta: app_label = 'schema' apps = new_apps self.local_models = [ LocalBookWithM2M, LocalBookWithM2M._meta.get_field('tags').rel.through, ] self.local_models = [LocalBookWithM2M] # Create the tables with connection.schema_editor() as editor: editor.create_model(Author) Loading Loading @@ -924,7 +908,6 @@ class SchemaTests(TransactionTestCase): # Create an M2M field new_field = M2MFieldClass("schema.TagM2MTest", related_name="authors") new_field.contribute_to_class(LocalAuthorWithM2M, "tags") self.local_models += [new_field.rel.through] # Ensure there's no m2m table there self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through) # Add the field Loading @@ -944,6 +927,14 @@ class SchemaTests(TransactionTestCase): # Ensure there's no m2m table there self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through) # Need to tear down using a model without the added M2M field that's # been removed. class LocalAuthorWithM2M(Model): class Meta: app_label = 'schema' apps = new_apps self.local_models = [LocalAuthorWithM2M] def test_m2m(self): self._test_m2m(ManyToManyField) Loading Loading @@ -1014,10 +1005,7 @@ class SchemaTests(TransactionTestCase): app_label = 'schema' apps = new_apps self.local_models = [ LocalBookWithM2M, LocalBookWithM2M._meta.get_field('tags').rel.through, ] self.local_models = [LocalBookWithM2M] # Create the tables with connection.schema_editor() as editor: Loading @@ -1038,11 +1026,20 @@ class SchemaTests(TransactionTestCase): old_field = LocalBookWithM2M._meta.get_field("tags") new_field = M2MFieldClass(UniqueTest) new_field.contribute_to_class(LocalBookWithM2M, "uniques") self.local_models += [new_field.rel.through] with connection.schema_editor() as editor: editor.alter_field(LocalBookWithM2M, old_field, new_field) # Ensure old M2M is gone self.assertRaises(DatabaseError, self.column_classes, LocalBookWithM2M._meta.get_field("tags").rel.through) # This model looks like the new model and is used for teardown. class LocalBookWithM2M(Model): uniques = M2MFieldClass(UniqueTest) class Meta: app_label = 'schema' apps = new_apps self.local_models = [LocalBookWithM2M] # Ensure the new M2M exists and points to UniqueTest constraints = self.get_constraints(new_field.rel.through._meta.db_table) if connection.features.supports_foreign_keys: Loading