[1.8.x] Refs #25745 -- Avoided multiple registration of the same model in schema tests.

Conflicts:
	tests/schema/tests.py

Backport of 64240263f2 from master
This commit is contained in:
Simon Charette 2015-11-13 17:13:27 -05:00
parent da20004a61
commit afe84c71eb
1 changed files with 12 additions and 15 deletions

View File

@ -58,6 +58,10 @@ class SchemaTests(TransactionTestCase):
model._meta._expire_cache() model._meta._expire_cache()
if 'schema' in new_apps.all_models: if 'schema' in new_apps.all_models:
for model in self.local_models: for model in self.local_models:
for many_to_many in model._meta.many_to_many:
through = many_to_many.rel.through
if through and through._meta.auto_created:
del new_apps.all_models['schema'][through._meta.model_name]
del new_apps.all_models['schema'][model._meta.model_name] del new_apps.all_models['schema'][model._meta.model_name]
def delete_tables(self): def delete_tables(self):
@ -927,13 +931,12 @@ class SchemaTests(TransactionTestCase):
# Ensure there's no m2m table there # Ensure there's no m2m table there
self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through) self.assertRaises(DatabaseError, self.column_classes, new_field.rel.through)
# Need to tear down using a model without the added M2M field that's # Make sure the model state is coherent with the table one now that
# been removed. # we've removed the tags field.
class LocalAuthorWithM2M(Model): opts = LocalAuthorWithM2M._meta
class Meta: opts.local_many_to_many.remove(new_field)
app_label = 'schema' del new_apps.all_models['schema'][new_field.rel.through._meta.model_name]
apps = new_apps opts._expire_cache()
self.local_models = [LocalAuthorWithM2M]
def test_m2m(self): def test_m2m(self):
self._test_m2m(ManyToManyField) self._test_m2m(ManyToManyField)
@ -1032,14 +1035,8 @@ class SchemaTests(TransactionTestCase):
self.assertRaises(DatabaseError, self.column_classes, LocalBookWithM2M._meta.get_field("tags").rel.through) 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. # This model looks like the new model and is used for teardown.
class LocalBookWithM2M(Model): opts = LocalBookWithM2M._meta
uniques = M2MFieldClass(UniqueTest) opts.local_many_to_many.remove(old_field)
class Meta:
app_label = 'schema'
apps = new_apps
self.local_models = [LocalBookWithM2M]
# Ensure the new M2M exists and points to UniqueTest # Ensure the new M2M exists and points to UniqueTest
constraints = self.get_constraints(new_field.rel.through._meta.db_table) constraints = self.get_constraints(new_field.rel.through._meta.db_table)
if connection.features.supports_foreign_keys: if connection.features.supports_foreign_keys: