mirror of
https://github.com/django/django.git
synced 2025-10-05 16:20:26 +00:00
[4.1.x] Fixed #33905 -- Fixed CheckConstraint() validation on range fields.
Bug in667105877e
. Backport ofe0ae1363ec
from main
This commit is contained in:
parent
6b0193146d
commit
e215948f0d
3 changed files with 41 additions and 0 deletions
|
@ -113,6 +113,41 @@ class SchemaTests(PostgreSQLTestCase):
|
|||
timestamps_inner=(datetime_1, datetime_2),
|
||||
)
|
||||
|
||||
def test_check_constraint_range_contains(self):
|
||||
constraint = CheckConstraint(
|
||||
check=Q(ints__contains=(1, 5)),
|
||||
name="ints_contains",
|
||||
)
|
||||
msg = f"Constraint “{constraint.name}” is violated."
|
||||
with self.assertRaisesMessage(ValidationError, msg):
|
||||
constraint.validate(RangesModel, RangesModel(ints=(6, 10)))
|
||||
|
||||
def test_check_constraint_range_lower_upper(self):
|
||||
constraint = CheckConstraint(
|
||||
check=Q(ints__startswith__gte=0) & Q(ints__endswith__lte=99),
|
||||
name="ints_range_lower_upper",
|
||||
)
|
||||
msg = f"Constraint “{constraint.name}” is violated."
|
||||
with self.assertRaisesMessage(ValidationError, msg):
|
||||
constraint.validate(RangesModel, RangesModel(ints=(-1, 20)))
|
||||
with self.assertRaisesMessage(ValidationError, msg):
|
||||
constraint.validate(RangesModel, RangesModel(ints=(0, 100)))
|
||||
constraint.validate(RangesModel, RangesModel(ints=(0, 99)))
|
||||
|
||||
def test_check_constraint_range_lower_with_nulls(self):
|
||||
constraint = CheckConstraint(
|
||||
check=Q(ints__isnull=True) | Q(ints__startswith__gte=0),
|
||||
name="ints_optional_positive_range",
|
||||
)
|
||||
constraint.validate(RangesModel, RangesModel())
|
||||
constraint = CheckConstraint(
|
||||
check=Q(ints__startswith__gte=0),
|
||||
name="ints_positive_range",
|
||||
)
|
||||
msg = f"Constraint “{constraint.name}” is violated."
|
||||
with self.assertRaisesMessage(ValidationError, msg):
|
||||
constraint.validate(RangesModel, RangesModel())
|
||||
|
||||
def test_opclass(self):
|
||||
constraint = UniqueConstraint(
|
||||
name="test_opclass",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue