Fixed #23483 -- Prevented ImproperlyConfigured with dotted app names

Made sure the app labels stay unique for the AppConfigStubs, so
migrations wouldn't fail if two dotted app names has the same last part
(e.g. django.contrib.auth and vendor.auth)
This commit is contained in:
Szilveszter Farkas 2014-09-12 13:11:09 -07:00 committed by Carl Meyer
parent 9c8c28f6f4
commit 5e32605ce9
2 changed files with 22 additions and 0 deletions

View File

@ -124,6 +124,7 @@ class AppConfigStub(AppConfig):
path = '' path = ''
def __init__(self, label): def __init__(self, label):
self.label = label
super(AppConfigStub, self).__init__(label, None) super(AppConfigStub, self).__init__(label, None)
def import_models(self, all_models): def import_models(self, all_models):

View File

@ -254,6 +254,27 @@ class StateTests(TestCase):
with self.assertRaises(InvalidBasesError): with self.assertRaises(InvalidBasesError):
project_state.render() project_state.render()
def test_render_unique_app_labels(self):
"""
Tests that the ProjectState render method doesn't raise an
ImproperlyConfigured exception about unique labels if two dotted app
names have the same last part.
"""
class A(models.Model):
class Meta:
app_label = "django.contrib.auth"
class B(models.Model):
class Meta:
app_label = "vendor.auth"
# Make a ProjectState and render it
project_state = ProjectState()
project_state.add_model_state(ModelState.from_model(A))
project_state.add_model_state(ModelState.from_model(B))
final_apps = project_state.render()
self.assertEqual(len(final_apps.get_models()), 2)
def test_equality(self): def test_equality(self):
""" """
Tests that == and != are implemented correctly. Tests that == and != are implemented correctly.