Loading django/conf/__init__.py +3 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,9 @@ class BaseSettings(object): elif name == "ALLOWED_INCLUDE_ROOTS" and isinstance(value, six.string_types): raise ValueError("The ALLOWED_INCLUDE_ROOTS setting must be set " "to a tuple, not a string.") elif name == "INSTALLED_APPS" and len(value) != len(set(value)): raise ImproperlyConfigured("The INSTALLED_APPS setting must contain unique values.") object.__setattr__(self, name, value) Loading tests/settings_tests/tests.py +21 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,27 @@ class TestComplexSettingOverride(TestCase): self.assertEqual('Overriding setting TEST_WARN can lead to unexpected behaviour.', str(w[-1].message)) class UniqueSettngsTests(TestCase): """ Tests for the INSTALLED_APPS setting. """ settings_module = settings def setUp(self): self._installed_apps = self.settings_module.INSTALLED_APPS def tearDown(self): self.settings_module.INSTALLED_APPS = self._installed_apps def test_unique(self): """ An ImproperlyConfigured exception is raised if the INSTALLED_APPS contains any duplicate strings. """ with self.assertRaises(ImproperlyConfigured): self.settings_module.INSTALLED_APPS = ("myApp1", "myApp1", "myApp2", "myApp3") class TrailingSlashURLTests(TestCase): """ Tests for the MEDIA_URL and STATIC_URL settings. Loading Loading
django/conf/__init__.py +3 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,9 @@ class BaseSettings(object): elif name == "ALLOWED_INCLUDE_ROOTS" and isinstance(value, six.string_types): raise ValueError("The ALLOWED_INCLUDE_ROOTS setting must be set " "to a tuple, not a string.") elif name == "INSTALLED_APPS" and len(value) != len(set(value)): raise ImproperlyConfigured("The INSTALLED_APPS setting must contain unique values.") object.__setattr__(self, name, value) Loading
tests/settings_tests/tests.py +21 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,27 @@ class TestComplexSettingOverride(TestCase): self.assertEqual('Overriding setting TEST_WARN can lead to unexpected behaviour.', str(w[-1].message)) class UniqueSettngsTests(TestCase): """ Tests for the INSTALLED_APPS setting. """ settings_module = settings def setUp(self): self._installed_apps = self.settings_module.INSTALLED_APPS def tearDown(self): self.settings_module.INSTALLED_APPS = self._installed_apps def test_unique(self): """ An ImproperlyConfigured exception is raised if the INSTALLED_APPS contains any duplicate strings. """ with self.assertRaises(ImproperlyConfigured): self.settings_module.INSTALLED_APPS = ("myApp1", "myApp1", "myApp2", "myApp3") class TrailingSlashURLTests(TestCase): """ Tests for the MEDIA_URL and STATIC_URL settings. Loading