summaryrefslogtreecommitdiff
path: root/tests/constraints
diff options
context:
space:
mode:
authorgabn88 <gerben_m88@hotmail.com>2024-01-11 17:43:52 +0100
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-10-10 09:20:37 +0200
commite970bb7ca71c00594b42a024a15a8ac007cc2c7a (patch)
treebc3178c664e587534a90c1b35f3d229bfc030380 /tests/constraints
parent1979b1403adeb437831a1a8885353e158ec9ad55 (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.py4
-rw-r--r--tests/constraints/tests.py35
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)