|
@@ -1,6 +1,7 @@
|
|
|
# -*- encoding: utf-8 -*-
|
|
|
from __future__ import unicode_literals
|
|
|
|
|
|
+import decimal
|
|
|
import unittest
|
|
|
|
|
|
from django.core.checks import Error, Warning as DjangoWarning
|
|
@@ -64,6 +65,22 @@ class BooleanFieldTests(IsolatedModelsTestCase):
|
|
|
]
|
|
|
self.assertEqual(errors, expected)
|
|
|
|
|
|
+ def test_invalid_default(self):
|
|
|
+ class Model(models.Model):
|
|
|
+ field = models.BooleanField(default='invalid')
|
|
|
+
|
|
|
+ field = Model._meta.get_field('field')
|
|
|
+ errors = field.check()
|
|
|
+ expected = [
|
|
|
+ Error(
|
|
|
+ "Invalid 'default' value: 'invalid' value must be either True or False.",
|
|
|
+ hint=None,
|
|
|
+ obj=field,
|
|
|
+ id='fields.E008',
|
|
|
+ ),
|
|
|
+ ]
|
|
|
+ self.assertEqual(errors, expected)
|
|
|
+
|
|
|
|
|
|
class CharFieldTests(IsolatedModelsTestCase, TestCase):
|
|
|
|
|
@@ -215,6 +232,22 @@ class CharFieldTests(IsolatedModelsTestCase, TestCase):
|
|
|
]
|
|
|
self.assertEqual(errors, expected)
|
|
|
|
|
|
+ def test_invalid_default(self):
|
|
|
+ class Model(models.Model):
|
|
|
+ field = models.CharField(max_length=10, default=None)
|
|
|
+
|
|
|
+ field = Model._meta.get_field('field')
|
|
|
+ errors = field.check()
|
|
|
+ expected = [
|
|
|
+ Error(
|
|
|
+ "Invalid 'default' value: This field cannot be null.",
|
|
|
+ hint=None,
|
|
|
+ obj=field,
|
|
|
+ id='fields.E008',
|
|
|
+ ),
|
|
|
+ ]
|
|
|
+ self.assertEqual(errors, expected)
|
|
|
+
|
|
|
|
|
|
class DateFieldTests(IsolatedModelsTestCase, TestCase):
|
|
|
|
|
@@ -281,6 +314,25 @@ class DateFieldTests(IsolatedModelsTestCase, TestCase):
|
|
|
def test_fix_default_value_tz(self):
|
|
|
self.test_fix_default_value()
|
|
|
|
|
|
+ def test_invalid_default(self):
|
|
|
+ class Model(models.Model):
|
|
|
+ field = models.DateField(default='invalid')
|
|
|
+
|
|
|
+ field = Model._meta.get_field('field')
|
|
|
+ errors = field.check()
|
|
|
+ message = (
|
|
|
+ "Invalid 'default' value: 'invalid' value has an invalid date format. It must be in YYYY-MM-DD format."
|
|
|
+ )
|
|
|
+ expected = [
|
|
|
+ Error(
|
|
|
+ message,
|
|
|
+ hint=None,
|
|
|
+ obj=field,
|
|
|
+ id='fields.E008',
|
|
|
+ ),
|
|
|
+ ]
|
|
|
+ self.assertEqual(errors, expected)
|
|
|
+
|
|
|
|
|
|
class DateTimeFieldTests(IsolatedModelsTestCase, TestCase):
|
|
|
|
|
@@ -419,6 +471,22 @@ class DecimalFieldTests(IsolatedModelsTestCase):
|
|
|
expected = []
|
|
|
self.assertEqual(errors, expected)
|
|
|
|
|
|
+ def test_invalid_default(self):
|
|
|
+ class Model(models.Model):
|
|
|
+ field = models.DecimalField(max_digits=3, decimal_places=2, default=decimal.Decimal('20.00'))
|
|
|
+
|
|
|
+ field = Model._meta.get_field('field')
|
|
|
+ errors = field.check()
|
|
|
+ expected = [
|
|
|
+ Error(
|
|
|
+ "Invalid 'default' value: Ensure that there are no more than 3 digits in total.",
|
|
|
+ hint=None,
|
|
|
+ obj=field,
|
|
|
+ id='fields.E008',
|
|
|
+ ),
|
|
|
+ ]
|
|
|
+ self.assertEqual(errors, expected)
|
|
|
+
|
|
|
|
|
|
class FileFieldTests(IsolatedModelsTestCase):
|
|
|
|