diff options
| author | Simon Charette <charette.s@gmail.com> | 2023-07-07 19:43:51 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-07-19 21:42:27 +0200 |
| commit | 595a2abb58e04caa4d55fb2589bb80fb2a8fdfa1 (patch) | |
| tree | f08cf5a71a9d637818d896a7b31b2d7860e336ca /tests/validation | |
| parent | 98cfb90182a8baa806fc4e09e294b6cfc5d09eff (diff) | |
Fixed #34701 -- Added support for NULLS [NOT] DISTINCT on PostgreSQL 15+.
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) |
