diff options
Diffstat (limited to 'tests/validation')
| -rw-r--r-- | tests/validation/models.py | 14 | ||||
| -rw-r--r-- | tests/validation/test_constraints.py | 23 |
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/validation/models.py b/tests/validation/models.py index 8919a69310..612a8dd63a 100644 --- a/tests/validation/models.py +++ b/tests/validation/models.py @@ -217,3 +217,17 @@ class UniqueConstraintConditionProduct(models.Model): condition=models.Q(color__isnull=True), ), ] + + +class UniqueConstraintNullsDistinctProduct(models.Model): + name = models.CharField(max_length=255, blank=True, null=True) + + class Meta: + required_db_features = {"supports_nulls_distinct_unique_constraints"} + constraints = [ + models.UniqueConstraint( + fields=["name"], + name="name_nulls_not_distinct_uniq", + nulls_distinct=False, + ), + ] diff --git a/tests/validation/test_constraints.py b/tests/validation/test_constraints.py index 0b1ee6518e..eea2d0c533 100644 --- a/tests/validation/test_constraints.py +++ b/tests/validation/test_constraints.py @@ -6,6 +6,7 @@ from .models import ( ChildUniqueConstraintProduct, Product, UniqueConstraintConditionProduct, + UniqueConstraintNullsDistinctProduct, UniqueConstraintProduct, ) @@ -93,3 +94,25 @@ class PerformConstraintChecksTest(TestCase): UniqueConstraintConditionProduct.objects.create(name="product") product = UniqueConstraintConditionProduct(name="product") product.full_clean(validate_constraints=False) + + @skipUnlessDBFeature("supports_nulls_distinct_unique_constraints") + def test_full_clean_with_nulls_distinct_unique_constraints(self): + UniqueConstraintNullsDistinctProduct.objects.create(name=None) + product = UniqueConstraintNullsDistinctProduct(name=None) + with self.assertRaises(ValidationError) as cm: + product.full_clean() + self.assertEqual( + cm.exception.message_dict, + { + "name": [ + "Unique constraint nulls distinct product with this Name " + "already exists." + ] + }, + ) + + @skipUnlessDBFeature("supports_nulls_distinct_unique_constraints") + def test_full_clean_with_nulls_distinct_unique_constraints_disabled(self): + UniqueConstraintNullsDistinctProduct.objects.create(name=None) + product = UniqueConstraintNullsDistinctProduct(name=None) + product.full_clean(validate_constraints=False) |
