diff options
author | Tom Carrick <tom@carrick.eu> | 2020-07-18 13:17:39 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-09-21 18:24:56 +0200 |
commit | e387f191f76777015b6ea687ce83cdb05ee47cee (patch) | |
tree | 003d83b5efda40fbfcdc1aa9302faca9578b1e30 /tests/inspectdb | |
parent | ba6b32e5efc4c813ba4432777b3b1743d4205d14 (diff) | |
download | django-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.py | 19 | ||||
-rw-r--r-- | tests/inspectdb/tests.py | 37 |
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() |