1
0
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:
Adam Johnson
2017-07-11 10:53:22 +02:00
committed by Tim Graham
parent 169c3b3e07
commit f816ceedf1
5 changed files with 202 additions and 409 deletions

View File

@@ -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):