summaryrefslogtreecommitdiff
path: root/tests/validation
diff options
context:
space:
mode:
Diffstat (limited to 'tests/validation')
-rw-r--r--tests/validation/models.py14
-rw-r--r--tests/validation/test_constraints.py23
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)