diff options
| author | David Sanders <shang.xiao.sanders@gmail.com> | 2022-08-09 16:16:23 +1000 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-08-09 20:13:21 +0200 |
| commit | e0ae1363ec2aa71945be26f869cafd4181ccbc95 (patch) | |
| tree | e76e177099dec1742c46ed4451b75a24b0d3a6ba /tests/postgres_tests | |
| parent | e0ac72fe80a806421dcbbbac22e483b27d2ede7b (diff) | |
Fixed #33905 -- Fixed CheckConstraint() validation on range fields.
Bug in 667105877e6723c6985399803a364848891513cc.
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/test_constraints.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/postgres_tests/test_constraints.py b/tests/postgres_tests/test_constraints.py index b3822e5805..a6f7b5be85 100644 --- a/tests/postgres_tests/test_constraints.py +++ b/tests/postgres_tests/test_constraints.py @@ -123,6 +123,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", |
