mirror of https://github.com/django/django.git
Changed get_validation_errors to use an app config.
This commit is contained in:
parent
856aaaf2b1
commit
e5bcd1d455
|
@ -196,21 +196,21 @@ class CustomUserModelValidationTestCase(TestCase):
|
||||||
def test_required_fields_is_list(self):
|
def test_required_fields_is_list(self):
|
||||||
"REQUIRED_FIELDS should be a list."
|
"REQUIRED_FIELDS should be a list."
|
||||||
new_io = StringIO()
|
new_io = StringIO()
|
||||||
get_validation_errors(new_io, apps.get_app_config('auth').models_module)
|
get_validation_errors(new_io, apps.get_app_config('auth'))
|
||||||
self.assertIn("The REQUIRED_FIELDS must be a list or tuple.", new_io.getvalue())
|
self.assertIn("The REQUIRED_FIELDS must be a list or tuple.", new_io.getvalue())
|
||||||
|
|
||||||
@override_settings(AUTH_USER_MODEL='auth.CustomUserBadRequiredFields')
|
@override_settings(AUTH_USER_MODEL='auth.CustomUserBadRequiredFields')
|
||||||
def test_username_not_in_required_fields(self):
|
def test_username_not_in_required_fields(self):
|
||||||
"USERNAME_FIELD should not appear in REQUIRED_FIELDS."
|
"USERNAME_FIELD should not appear in REQUIRED_FIELDS."
|
||||||
new_io = StringIO()
|
new_io = StringIO()
|
||||||
get_validation_errors(new_io, apps.get_app_config('auth').models_module)
|
get_validation_errors(new_io, apps.get_app_config('auth'))
|
||||||
self.assertIn("The field named as the USERNAME_FIELD should not be included in REQUIRED_FIELDS on a swappable User model.", new_io.getvalue())
|
self.assertIn("The field named as the USERNAME_FIELD should not be included in REQUIRED_FIELDS on a swappable User model.", new_io.getvalue())
|
||||||
|
|
||||||
@override_settings(AUTH_USER_MODEL='auth.CustomUserNonUniqueUsername')
|
@override_settings(AUTH_USER_MODEL='auth.CustomUserNonUniqueUsername')
|
||||||
def test_username_non_unique(self):
|
def test_username_non_unique(self):
|
||||||
"A non-unique USERNAME_FIELD should raise a model validation error."
|
"A non-unique USERNAME_FIELD should raise a model validation error."
|
||||||
new_io = StringIO()
|
new_io = StringIO()
|
||||||
get_validation_errors(new_io, apps.get_app_config('auth').models_module)
|
get_validation_errors(new_io, apps.get_app_config('auth'))
|
||||||
self.assertIn("The USERNAME_FIELD must be unique. Add unique=True to the field parameters.", new_io.getvalue())
|
self.assertIn("The USERNAME_FIELD must be unique. Add unique=True to the field parameters.", new_io.getvalue())
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -141,8 +141,8 @@ class BaseCommand(object):
|
||||||
performed prior to executing the command. Default value is
|
performed prior to executing the command. Default value is
|
||||||
``True``. To validate an individual application's models
|
``True``. To validate an individual application's models
|
||||||
rather than all applications' models, call
|
rather than all applications' models, call
|
||||||
``self.validate(app)`` from ``handle()``, where ``app`` is the
|
``self.validate(app_config)`` from ``handle()``, where ``app_config``
|
||||||
application's Python module.
|
is the application's configuration provided by the app registry.
|
||||||
|
|
||||||
``leave_locale_alone``
|
``leave_locale_alone``
|
||||||
A boolean indicating whether the locale set in settings should be
|
A boolean indicating whether the locale set in settings should be
|
||||||
|
@ -304,16 +304,16 @@ class BaseCommand(object):
|
||||||
if saved_locale is not None:
|
if saved_locale is not None:
|
||||||
translation.activate(saved_locale)
|
translation.activate(saved_locale)
|
||||||
|
|
||||||
def validate(self, app=None, display_num_errors=False):
|
def validate(self, app_config=None, display_num_errors=False):
|
||||||
"""
|
"""
|
||||||
Validates the given app, raising CommandError for any errors.
|
Validates the given app, raising CommandError for any errors.
|
||||||
|
|
||||||
If app is None, then this will validate all installed apps.
|
If app_config is None, then this will validate all installed apps.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from django.core.management.validation import get_validation_errors
|
from django.core.management.validation import get_validation_errors
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
num_errors = get_validation_errors(s, app)
|
num_errors = get_validation_errors(s, app_config)
|
||||||
if num_errors:
|
if num_errors:
|
||||||
s.seek(0)
|
s.seek(0)
|
||||||
error_text = s.read()
|
error_text = s.read()
|
||||||
|
|
|
@ -20,7 +20,7 @@ class ModelErrorCollection:
|
||||||
self.outfile.write(self.style.ERROR(force_str("%s: %s\n" % (context, error))))
|
self.outfile.write(self.style.ERROR(force_str("%s: %s\n" % (context, error))))
|
||||||
|
|
||||||
|
|
||||||
def get_validation_errors(outfile, app=None):
|
def get_validation_errors(outfile, app_config=None):
|
||||||
"""
|
"""
|
||||||
Validates all models that are part of the specified app. If no app name is provided,
|
Validates all models that are part of the specified app. If no app name is provided,
|
||||||
validates all models of all installed apps. Writes errors, if any, to outfile.
|
validates all models of all installed apps. Writes errors, if any, to outfile.
|
||||||
|
@ -32,7 +32,7 @@ def get_validation_errors(outfile, app=None):
|
||||||
|
|
||||||
e = ModelErrorCollection(outfile)
|
e = ModelErrorCollection(outfile)
|
||||||
|
|
||||||
for cls in apps.get_models(app, include_swapped=True):
|
for cls in (app_config or apps).get_models(include_swapped=True):
|
||||||
opts = cls._meta
|
opts = cls._meta
|
||||||
|
|
||||||
# Check swappable attribute.
|
# Check swappable attribute.
|
||||||
|
|
|
@ -32,13 +32,13 @@ class InvalidModelTestCase(unittest.TestCase):
|
||||||
TEST_SWAPPED_MODEL_BAD_MODEL='not_an_app.Target',
|
TEST_SWAPPED_MODEL_BAD_MODEL='not_an_app.Target',
|
||||||
)
|
)
|
||||||
def test_invalid_models(self):
|
def test_invalid_models(self):
|
||||||
module = apps.get_app_config("invalid_models").models_module
|
app_config = apps.get_app_config("invalid_models")
|
||||||
get_validation_errors(self.stdout, module)
|
get_validation_errors(self.stdout, app_config)
|
||||||
|
|
||||||
self.stdout.seek(0)
|
self.stdout.seek(0)
|
||||||
error_log = self.stdout.read()
|
error_log = self.stdout.read()
|
||||||
actual = error_log.split('\n')
|
actual = error_log.split('\n')
|
||||||
expected = module.model_errors.split('\n')
|
expected = app_config.models_module.model_errors.split('\n')
|
||||||
|
|
||||||
unexpected = [err for err in actual if err not in expected]
|
unexpected = [err for err in actual if err not in expected]
|
||||||
missing = [err for err in expected if err not in actual]
|
missing = [err for err in expected if err not in actual]
|
||||||
|
|
Loading…
Reference in New Issue