summaryrefslogtreecommitdiff
path: root/tests/inspectdb
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/inspectdb
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/inspectdb')
-rw-r--r--tests/inspectdb/models.py19
-rw-r--r--tests/inspectdb/tests.py37
2 files changed, 54 insertions, 2 deletions
diff --git a/tests/inspectdb/models.py b/tests/inspectdb/models.py
index d0076ce94f..4d2c224da9 100644
--- a/tests/inspectdb/models.py
+++ b/tests/inspectdb/models.py
@@ -1,4 +1,4 @@
-from django.db import models
+from django.db import connection, models
class People(models.Model):
@@ -79,6 +79,23 @@ class JSONFieldColumnType(models.Model):
}
+test_collation = connection.features.test_collations.get('non_default')
+
+
+class CharFieldDbCollation(models.Model):
+ char_field = models.CharField(max_length=10, db_collation=test_collation)
+
+ class Meta:
+ required_db_features = {'supports_collation_on_charfield'}
+
+
+class TextFieldDbCollation(models.Model):
+ text_field = models.TextField(db_collation=test_collation)
+
+ class Meta:
+ required_db_features = {'supports_collation_on_textfield'}
+
+
class UniqueTogether(models.Model):
field1 = models.IntegerField()
field2 = models.CharField(max_length=10)
diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py
index fa3a7ac21f..6815629e95 100644
--- a/tests/inspectdb/tests.py
+++ b/tests/inspectdb/tests.py
@@ -8,7 +8,7 @@ from django.db import connection
from django.db.backends.base.introspection import TableInfo
from django.test import TestCase, TransactionTestCase, skipUnlessDBFeature
-from .models import PeopleMoreData
+from .models import PeopleMoreData, test_collation
def inspectdb_tables_only(table_name):
@@ -104,6 +104,41 @@ class InspectDBTestCase(TestCase):
self.assertIn('json_field = models.JSONField()', output)
self.assertIn('null_json_field = models.JSONField(blank=True, null=True)', output)
+ @skipUnlessDBFeature('supports_collation_on_charfield')
+ def test_char_field_db_collation(self):
+ out = StringIO()
+ call_command('inspectdb', 'inspectdb_charfielddbcollation', stdout=out)
+ output = out.getvalue()
+ if not connection.features.interprets_empty_strings_as_nulls:
+ self.assertIn(
+ "char_field = models.CharField(max_length=10, "
+ "db_collation='%s')" % test_collation,
+ output,
+ )
+ else:
+ self.assertIn(
+ "char_field = models.CharField(max_length=10, "
+ "db_collation='%s', blank=True, null=True)" % test_collation,
+ output,
+ )
+
+ @skipUnlessDBFeature('supports_collation_on_textfield')
+ def test_text_field_db_collation(self):
+ out = StringIO()
+ call_command('inspectdb', 'inspectdb_textfielddbcollation', stdout=out)
+ output = out.getvalue()
+ if not connection.features.interprets_empty_strings_as_nulls:
+ self.assertIn(
+ "text_field = models.TextField(db_collation='%s')" % test_collation,
+ output,
+ )
+ else:
+ self.assertIn(
+ "text_field = models.TextField(db_collation='%s, blank=True, "
+ "null=True)" % test_collation,
+ output,
+ )
+
def test_number_field_types(self):
"""Test introspection of various Django field types"""
assertFieldType = self.make_field_type_asserter()