diff options
Diffstat (limited to 'tests/invalid_models_tests/test_ordinary_fields.py')
| -rw-r--r-- | tests/invalid_models_tests/test_ordinary_fields.py | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/tests/invalid_models_tests/test_ordinary_fields.py b/tests/invalid_models_tests/test_ordinary_fields.py index 1fcf3f708d..2c2653a538 100644 --- a/tests/invalid_models_tests/test_ordinary_fields.py +++ b/tests/invalid_models_tests/test_ordinary_fields.py @@ -599,15 +599,16 @@ class DateTimeFieldTests(SimpleTestCase): @isolate_apps("invalid_models_tests") -class DecimalFieldTests(SimpleTestCase): - def test_required_attributes(self): +class DecimalFieldTests(TestCase): + def test_both_attributes_omitted(self): class Model(models.Model): field = models.DecimalField() field = Model._meta.get_field("field") - self.assertEqual( - field.check(), - [ + if connection.features.supports_no_precision_decimalfield: + expected = [] + else: + expected = [ Error( "DecimalFields must define a 'decimal_places' attribute.", obj=field, @@ -618,6 +619,52 @@ class DecimalFieldTests(SimpleTestCase): obj=field, id="fields.E132", ), + ] + self.assertEqual(field.check(), expected) + + def test_both_attributes_omitted_required_db_features(self): + class Model(models.Model): + field = models.DecimalField() + + class Meta: + required_db_features = {"supports_no_precision_decimalfield"} + + field = Model._meta.get_field("field") + self.assertEqual(field.check(databases=self.databases), []) + + @skipUnlessDBFeature("supports_no_precision_decimalfield") + def test_only_max_digits_defined(self): + class Model(models.Model): + field = models.DecimalField(max_digits=13) + + field = Model._meta.get_field("field") + self.assertEqual( + field.check(), + [ + Error( + "DecimalField’s max_digits and decimal_places must both " + "be defined or both omitted.", + obj=field, + id="fields.E135", + ), + ], + ) + + @skipUnlessDBFeature("supports_no_precision_decimalfield") + def test_only_decimal_places_defined(self): + class Model(models.Model): + field = models.DecimalField(decimal_places=5) + + field = Model._meta.get_field("field") + self.assertEqual( + field.check(), + [ + Error( + "DecimalField’s max_digits and decimal_places must both " + "be defined or both omitted.", + obj=field, + id="fields.E135", + ), ], ) |
