From e387f191f76777015b6ea687ce83cdb05ee47cee Mon Sep 17 00:00:00 2001 From: Tom Carrick Date: Sat, 18 Jul 2020 13:17:39 +0200 Subject: Fixed #31777 -- Added support for database collations to Char/TextFields. Thanks Simon Charette and Mariusz Felisiak for reviews. --- tests/invalid_models_tests/test_ordinary_fields.py | 50 +++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'tests/invalid_models_tests/test_ordinary_fields.py') diff --git a/tests/invalid_models_tests/test_ordinary_fields.py b/tests/invalid_models_tests/test_ordinary_fields.py index a81f9eed90..6eddd853af 100644 --- a/tests/invalid_models_tests/test_ordinary_fields.py +++ b/tests/invalid_models_tests/test_ordinary_fields.py @@ -86,7 +86,7 @@ class BinaryFieldTests(SimpleTestCase): @isolate_apps('invalid_models_tests') -class CharFieldTests(SimpleTestCase): +class CharFieldTests(TestCase): def test_valid_field(self): class Model(models.Model): @@ -387,6 +387,30 @@ class CharFieldTests(SimpleTestCase): ) ]) + def test_db_collation(self): + class Model(models.Model): + field = models.CharField(max_length=100, db_collation='anything') + + field = Model._meta.get_field('field') + error = Error( + '%s does not support a database collation on CharFields.' + % connection.display_name, + id='fields.E190', + obj=field, + ) + expected = [] if connection.features.supports_collation_on_charfield else [error] + self.assertEqual(field.check(databases=self.databases), expected) + + def test_db_collation_required_db_features(self): + class Model(models.Model): + field = models.CharField(max_length=100, db_collation='anything') + + class Meta: + required_db_features = {'supports_collation_on_charfield'} + + field = Model._meta.get_field('field') + self.assertEqual(field.check(databases=self.databases), []) + @isolate_apps('invalid_models_tests') class DateFieldTests(SimpleTestCase): @@ -779,6 +803,30 @@ class TextFieldTests(TestCase): ) ]) + def test_db_collation(self): + class Model(models.Model): + field = models.TextField(db_collation='anything') + + field = Model._meta.get_field('field') + error = Error( + '%s does not support a database collation on TextFields.' + % connection.display_name, + id='fields.E190', + obj=field, + ) + expected = [] if connection.features.supports_collation_on_textfield else [error] + self.assertEqual(field.check(databases=self.databases), expected) + + def test_db_collation_required_db_features(self): + class Model(models.Model): + field = models.TextField(db_collation='anything') + + class Meta: + required_db_features = {'supports_collation_on_textfield'} + + field = Model._meta.get_field('field') + self.assertEqual(field.check(databases=self.databases), []) + @isolate_apps('invalid_models_tests') class UUIDFieldTests(TestCase): -- cgit v1.3