Commit 2ac89012 authored by SusanTan's avatar SusanTan Committed by Tim Graham
Browse files

Fixed #12288 -- Added unique validation for INSTALLED_APPS

parent 4fa2738f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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)


+21 −0
Original line number Diff line number Diff line
@@ -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.