diff options
| author | Ichlasul Affan <ichlaffterlalu@gmail.com> | 2020-03-12 02:01:32 +0700 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-04-10 12:00:27 +0200 |
| commit | 53d229ff632c2a3e547f2820a94239f38ba4d4ac (patch) | |
| tree | 8bdd286062729f58e4508e51bb16734a1ab027a8 /tests/invalid_models_tests | |
| parent | e8d308892597e6abee5b94a77543a7ef7d34a655 (diff) | |
Fixed #31351 -- Added system checks for partial indexes and unique constraints support.
Diffstat (limited to 'tests/invalid_models_tests')
| -rw-r--r-- | tests/invalid_models_tests/test_models.py | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py index 6090724adb..f3f0bc8bd5 100644 --- a/tests/invalid_models_tests/test_models.py +++ b/tests/invalid_models_tests/test_models.py @@ -234,7 +234,7 @@ class UniqueTogetherTests(SimpleTestCase): @isolate_apps('invalid_models_tests') -class IndexesTests(SimpleTestCase): +class IndexesTests(TestCase): def test_pointing_to_missing_field(self): class Model(models.Model): @@ -331,6 +331,50 @@ class IndexesTests(SimpleTestCase): ), ]) + def test_index_with_condition(self): + class Model(models.Model): + age = models.IntegerField() + + class Meta: + indexes = [ + models.Index( + fields=['age'], + name='index_age_gte_10', + condition=models.Q(age__gte=10), + ), + ] + + errors = Model.check(databases=self.databases) + expected = [] if connection.features.supports_partial_indexes else [ + Warning( + '%s does not support indexes with conditions.' + % connection.display_name, + hint=( + "Conditions will be ignored. Silence this warning if you " + "don't care about it." + ), + obj=Model, + id='models.W037', + ) + ] + self.assertEqual(errors, expected) + + def test_index_with_condition_required_db_features(self): + class Model(models.Model): + age = models.IntegerField() + + class Meta: + required_db_features = {'supports_partial_indexes'} + indexes = [ + models.Index( + fields=['age'], + name='index_age_gte_10', + condition=models.Q(age__gte=10), + ), + ] + + self.assertEqual(Model.check(databases=self.databases), []) + @isolate_apps('invalid_models_tests') class FieldNamesTests(TestCase): @@ -1325,5 +1369,48 @@ class ConstraintsTests(TestCase): class Meta: required_db_features = {'supports_table_check_constraints'} constraints = [models.CheckConstraint(check=models.Q(age__gte=18), name='is_adult')] + self.assertEqual(Model.check(databases=self.databases), []) + + def test_unique_constraint_with_condition(self): + class Model(models.Model): + age = models.IntegerField() + + class Meta: + constraints = [ + models.UniqueConstraint( + fields=['age'], + name='unique_age_gte_100', + condition=models.Q(age__gte=100), + ), + ] + + errors = Model.check(databases=self.databases) + expected = [] if connection.features.supports_partial_indexes else [ + Warning( + '%s does not support unique constraints with conditions.' + % connection.display_name, + hint=( + "A constraint won't be created. Silence this warning if " + "you don't care about it." + ), + obj=Model, + id='models.W036', + ), + ] + self.assertEqual(errors, expected) + + def test_unique_constraint_with_condition_required_db_features(self): + class Model(models.Model): + age = models.IntegerField() + + class Meta: + required_db_features = {'supports_partial_indexes'} + constraints = [ + models.UniqueConstraint( + fields=['age'], + name='unique_age_gte_100', + condition=models.Q(age__gte=100), + ), + ] self.assertEqual(Model.check(databases=self.databases), []) |
