Fixed #35103 -- Used provided error code and message when fields is set without a condition on UniqueConstraint.

This commit is contained in:
gabn88 2024-01-11 17:43:52 +01:00 committed by Sarah Boyce
parent 1979b1403a
commit e970bb7ca7
5 changed files with 89 additions and 23 deletions

View file

@ -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)