summaryrefslogtreecommitdiff
path: root/tests/invalid_models_tests
diff options
context:
space:
mode:
authorTom Carrick <tom@carrick.eu>2020-07-18 13:17:39 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-09-21 18:24:56 +0200
commite387f191f76777015b6ea687ce83cdb05ee47cee (patch)
tree003d83b5efda40fbfcdc1aa9302faca9578b1e30 /tests/invalid_models_tests
parentba6b32e5efc4c813ba4432777b3b1743d4205d14 (diff)
downloaddjango-e387f191f76777015b6ea687ce83cdb05ee47cee.tar.gz
Fixed #31777 -- Added support for database collations to Char/TextFields.
Thanks Simon Charette and Mariusz Felisiak for reviews.
Diffstat (limited to 'tests/invalid_models_tests')
-rw-r--r--tests/invalid_models_tests/test_ordinary_fields.py50
1 files changed, 49 insertions, 1 deletions
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):