mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Made assertions in invalid_models_tests consistent.
This commit is contained in:
@@ -15,9 +15,7 @@ class AutoFieldTests(SimpleTestCase):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
||||
field = Model._meta.get_field('id')
|
||||
errors = field.check()
|
||||
expected = []
|
||||
self.assertEqual(errors, expected)
|
||||
self.assertEqual(field.check(), [])
|
||||
|
||||
def test_primary_key(self):
|
||||
# primary_key must be True. Refs #12467.
|
||||
@@ -30,15 +28,13 @@ class AutoFieldTests(SimpleTestCase):
|
||||
another = models.IntegerField(primary_key=True)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
'AutoFields must set primary_key=True.',
|
||||
obj=field,
|
||||
id='fields.E100',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
@@ -49,16 +45,14 @@ class BooleanFieldTests(SimpleTestCase):
|
||||
field = models.BooleanField(null=True)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
'BooleanFields do not accept null values.',
|
||||
hint='Use a NullBooleanField instead.',
|
||||
obj=field,
|
||||
id='fields.E110',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
@@ -75,99 +69,85 @@ class CharFieldTests(TestCase):
|
||||
db_index=True)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = []
|
||||
self.assertEqual(errors, expected)
|
||||
self.assertEqual(field.check(), [])
|
||||
|
||||
def test_missing_max_length(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField()
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"CharFields must define a 'max_length' attribute.",
|
||||
obj=field,
|
||||
id='fields.E120',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_negative_max_length(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length=-1)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'max_length' must be a positive integer.",
|
||||
obj=field,
|
||||
id='fields.E121',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_bad_max_length_value(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length="bad")
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'max_length' must be a positive integer.",
|
||||
obj=field,
|
||||
id='fields.E121',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_str_max_length_value(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length='20')
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'max_length' must be a positive integer.",
|
||||
obj=field,
|
||||
id='fields.E121',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_str_max_length_type(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length=True)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'max_length' must be a positive integer.",
|
||||
obj=field,
|
||||
id='fields.E121'
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_non_iterable_choices(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length=10, choices='bad')
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'choices' must be an iterable (e.g., a list or tuple).",
|
||||
obj=field,
|
||||
id='fields.E004',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_iterable_of_iterable_choices(self):
|
||||
class ThingItem:
|
||||
@@ -195,30 +175,26 @@ class CharFieldTests(TestCase):
|
||||
field = models.CharField(max_length=10, choices=[(1, 2, 3), (1, 2, 3)])
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'choices' must be an iterable containing (actual value, human readable name) tuples.",
|
||||
obj=field,
|
||||
id='fields.E005',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_bad_db_index_value(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length=10, db_index='bad')
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'db_index' must be None, True or False.",
|
||||
obj=field,
|
||||
id='fields.E006',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_bad_validators(self):
|
||||
class Model(models.Model):
|
||||
@@ -247,19 +223,18 @@ class CharFieldTests(TestCase):
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
validator = DatabaseValidation(connection=connection)
|
||||
errors = validator.check_field(field)
|
||||
expected = [
|
||||
self.assertEqual(validator.check_field(field), [
|
||||
Error(
|
||||
'MySQL does not allow unique CharFields to have a max_length > 255.',
|
||||
obj=field,
|
||||
id='mysql.E001',
|
||||
)
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
class DateFieldTests(TestCase):
|
||||
maxDiff = None
|
||||
|
||||
def test_auto_now_and_auto_now_add_raise_error(self):
|
||||
class Model(models.Model):
|
||||
@@ -294,7 +269,7 @@ class DateFieldTests(TestCase):
|
||||
errors = field_dt.check()
|
||||
errors.extend(field_d.check())
|
||||
errors.extend(field_now.check()) # doesn't raise a warning
|
||||
expected = [
|
||||
self.assertEqual(errors, [
|
||||
DjangoWarning(
|
||||
'Fixed default value provided.',
|
||||
hint='It seems you set a fixed date / time / datetime '
|
||||
@@ -313,11 +288,7 @@ class DateFieldTests(TestCase):
|
||||
obj=field_d,
|
||||
id='fields.W161',
|
||||
)
|
||||
]
|
||||
maxDiff = self.maxDiff
|
||||
self.maxDiff = None
|
||||
self.assertEqual(errors, expected)
|
||||
self.maxDiff = maxDiff
|
||||
])
|
||||
|
||||
@override_settings(USE_TZ=True)
|
||||
def test_fix_default_value_tz(self):
|
||||
@@ -326,6 +297,7 @@ class DateFieldTests(TestCase):
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
class DateTimeFieldTests(TestCase):
|
||||
maxDiff = None
|
||||
|
||||
def test_fix_default_value(self):
|
||||
class Model(models.Model):
|
||||
@@ -339,7 +311,7 @@ class DateTimeFieldTests(TestCase):
|
||||
errors = field_dt.check()
|
||||
errors.extend(field_d.check())
|
||||
errors.extend(field_now.check()) # doesn't raise a warning
|
||||
expected = [
|
||||
self.assertEqual(errors, [
|
||||
DjangoWarning(
|
||||
'Fixed default value provided.',
|
||||
hint='It seems you set a fixed date / time / datetime '
|
||||
@@ -358,11 +330,7 @@ class DateTimeFieldTests(TestCase):
|
||||
obj=field_d,
|
||||
id='fields.W161',
|
||||
)
|
||||
]
|
||||
maxDiff = self.maxDiff
|
||||
self.maxDiff = None
|
||||
self.assertEqual(errors, expected)
|
||||
self.maxDiff = maxDiff
|
||||
])
|
||||
|
||||
@override_settings(USE_TZ=True)
|
||||
def test_fix_default_value_tz(self):
|
||||
@@ -377,8 +345,7 @@ class DecimalFieldTests(SimpleTestCase):
|
||||
field = models.DecimalField()
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"DecimalFields must define a 'decimal_places' attribute.",
|
||||
obj=field,
|
||||
@@ -389,16 +356,14 @@ class DecimalFieldTests(SimpleTestCase):
|
||||
obj=field,
|
||||
id='fields.E132',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_negative_max_digits_and_decimal_places(self):
|
||||
class Model(models.Model):
|
||||
field = models.DecimalField(max_digits=-1, decimal_places=-1)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'decimal_places' must be a non-negative integer.",
|
||||
obj=field,
|
||||
@@ -409,16 +374,14 @@ class DecimalFieldTests(SimpleTestCase):
|
||||
obj=field,
|
||||
id='fields.E133',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_bad_values_of_max_digits_and_decimal_places(self):
|
||||
class Model(models.Model):
|
||||
field = models.DecimalField(max_digits="bad", decimal_places="bad")
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'decimal_places' must be a non-negative integer.",
|
||||
obj=field,
|
||||
@@ -429,32 +392,27 @@ class DecimalFieldTests(SimpleTestCase):
|
||||
obj=field,
|
||||
id='fields.E133',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_decimal_places_greater_than_max_digits(self):
|
||||
class Model(models.Model):
|
||||
field = models.DecimalField(max_digits=9, decimal_places=10)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'max_digits' must be greater or equal to 'decimal_places'.",
|
||||
obj=field,
|
||||
id='fields.E134',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_valid_field(self):
|
||||
class Model(models.Model):
|
||||
field = models.DecimalField(max_digits=10, decimal_places=10)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = []
|
||||
self.assertEqual(errors, expected)
|
||||
self.assertEqual(field.check(), [])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
@@ -471,24 +429,20 @@ class FileFieldTests(SimpleTestCase):
|
||||
field = models.FileField(upload_to='somewhere')
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = []
|
||||
self.assertEqual(errors, expected)
|
||||
self.assertEqual(field.check(), [])
|
||||
|
||||
def test_primary_key(self):
|
||||
class Model(models.Model):
|
||||
field = models.FileField(primary_key=False, upload_to='somewhere')
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"'primary_key' is not a valid argument for a FileField.",
|
||||
obj=field,
|
||||
id='fields.E201',
|
||||
)
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
def test_upload_to_starts_with_slash(self):
|
||||
class Model(models.Model):
|
||||
@@ -524,15 +478,13 @@ class FilePathFieldTests(SimpleTestCase):
|
||||
field = models.FilePathField(allow_files=False, allow_folders=False)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
"FilePathFields must have either 'allow_files' or 'allow_folders' set to True.",
|
||||
obj=field,
|
||||
id='fields.E140',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
@@ -543,16 +495,14 @@ class GenericIPAddressFieldTests(SimpleTestCase):
|
||||
field = models.GenericIPAddressField(null=False, blank=True)
|
||||
|
||||
field = Model._meta.get_field('field')
|
||||
errors = field.check()
|
||||
expected = [
|
||||
self.assertEqual(field.check(), [
|
||||
Error(
|
||||
('GenericIPAddressFields cannot have blank=True if null=False, '
|
||||
'as blank values are stored as nulls.'),
|
||||
obj=field,
|
||||
id='fields.E150',
|
||||
),
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
@@ -590,21 +540,20 @@ class IntegerFieldTests(SimpleTestCase):
|
||||
class Model(models.Model):
|
||||
value = models.IntegerField(max_length=2)
|
||||
|
||||
value = Model._meta.get_field('value')
|
||||
errors = Model.check()
|
||||
expected = [
|
||||
field = Model._meta.get_field('value')
|
||||
self.assertEqual(field.check(), [
|
||||
DjangoWarning(
|
||||
"'max_length' is ignored when used with IntegerField",
|
||||
hint="Remove 'max_length' from field",
|
||||
obj=value,
|
||||
obj=field,
|
||||
id='fields.W122',
|
||||
)
|
||||
]
|
||||
self.assertEqual(errors, expected)
|
||||
])
|
||||
|
||||
|
||||
@isolate_apps('invalid_models_tests')
|
||||
class TimeFieldTests(TestCase):
|
||||
maxDiff = None
|
||||
|
||||
def test_fix_default_value(self):
|
||||
class Model(models.Model):
|
||||
@@ -618,7 +567,7 @@ class TimeFieldTests(TestCase):
|
||||
errors = field_dt.check()
|
||||
errors.extend(field_t.check())
|
||||
errors.extend(field_now.check()) # doesn't raise a warning
|
||||
expected = [
|
||||
self.assertEqual(errors, [
|
||||
DjangoWarning(
|
||||
'Fixed default value provided.',
|
||||
hint='It seems you set a fixed date / time / datetime '
|
||||
@@ -637,11 +586,7 @@ class TimeFieldTests(TestCase):
|
||||
obj=field_t,
|
||||
id='fields.W161',
|
||||
)
|
||||
]
|
||||
maxDiff = self.maxDiff
|
||||
self.maxDiff = None
|
||||
self.assertEqual(errors, expected)
|
||||
self.maxDiff = maxDiff
|
||||
])
|
||||
|
||||
@override_settings(USE_TZ=True)
|
||||
def test_fix_default_value_tz(self):
|
||||
|
||||
Reference in New Issue
Block a user