diff options
| author | gabn88 <gerben_m88@hotmail.com> | 2024-01-11 17:43:52 +0100 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-10-10 09:20:37 +0200 |
| commit | e970bb7ca71c00594b42a024a15a8ac007cc2c7a (patch) | |
| tree | bc3178c664e587534a90c1b35f3d229bfc030380 /tests/constraints | |
| parent | 1979b1403adeb437831a1a8885353e158ec9ad55 (diff) | |
Fixed #35103 -- Used provided error code and message when fields is set without a condition on UniqueConstraint.
Diffstat (limited to 'tests/constraints')
| -rw-r--r-- | tests/constraints/models.py | 4 | ||||
| -rw-r--r-- | tests/constraints/tests.py | 35 |
2 files changed, 36 insertions, 3 deletions
diff --git a/tests/constraints/models.py b/tests/constraints/models.py index 829f671cdd..95a29ffa4d 100644 --- a/tests/constraints/models.py +++ b/tests/constraints/models.py @@ -72,15 +72,13 @@ class GeneratedFieldVirtualProduct(models.Model): class UniqueConstraintProduct(models.Model): name = models.CharField(max_length=255) color = models.CharField(max_length=32, null=True) + age = models.IntegerField(null=True) class Meta: constraints = [ models.UniqueConstraint( fields=["name", "color"], name="name_color_uniq", - # Custom message and error code are ignored. - violation_error_code="custom_code", - violation_error_message="Custom message", ) ] diff --git a/tests/constraints/tests.py b/tests/constraints/tests.py index e1c431956f..9047710098 100644 --- a/tests/constraints/tests.py +++ b/tests/constraints/tests.py @@ -953,6 +953,41 @@ class UniqueConstraintTests(TestCase): ChildUniqueConstraintProduct(name=self.p1.name, color=self.p1.color), ) + def test_validate_unique_custom_code_and_message(self): + product = UniqueConstraintProduct.objects.create( + name="test", color="red", age=42 + ) + code = "custom_code" + message = "Custom message" + multiple_fields_constraint = models.UniqueConstraint( + fields=["color", "age"], + name="color_age_uniq", + violation_error_code=code, + violation_error_message=message, + ) + single_field_constraint = models.UniqueConstraint( + fields=["color"], + name="color_uniq", + violation_error_code=code, + violation_error_message=message, + ) + + with self.assertRaisesMessage(ValidationError, message) as cm: + multiple_fields_constraint.validate( + UniqueConstraintProduct, + UniqueConstraintProduct( + name="new-test", color=product.color, age=product.age + ), + ) + self.assertEqual(cm.exception.code, code) + + with self.assertRaisesMessage(ValidationError, message) as cm: + single_field_constraint.validate( + UniqueConstraintProduct, + UniqueConstraintProduct(name="new-test", color=product.color), + ) + self.assertEqual(cm.exception.code, code) + @skipUnlessDBFeature("supports_table_check_constraints") def test_validate_fields_unattached(self): Product.objects.create(price=42) |
