summaryrefslogtreecommitdiff
path: root/tests/schema
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-05-11 17:29:24 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-05-21 14:15:43 +0200
commit1378d665a1c85897d951f2ca9618b848fdbba2e7 (patch)
tree8f59c9a41828ec5ae7f9fe8ff0f565aaa76e9ed6 /tests/schema
parent519016e5f25d7c0a040015724f9920581551cab0 (diff)
downloaddjango-1378d665a1c85897d951f2ca9618b848fdbba2e7.tar.gz
Fixed #28816 -- Prevented silencing data loss when decreasing CharField.max_length on PostgreSQL.
Diffstat (limited to 'tests/schema')
-rw-r--r--tests/schema/tests.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index 0533b32859..64a1512a53 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -21,6 +21,7 @@ from django.db.models.fields.related import (
)
from django.db.models.indexes import Index
from django.db.transaction import TransactionManagementError, atomic
+from django.db.utils import DataError
from django.test import (
TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature,
)
@@ -803,6 +804,21 @@ class SchemaTests(TransactionTestCase):
with connection.schema_editor() as editor:
editor.alter_field(Author, old_field, new_field, strict=True)
+ @unittest.skipUnless(connection.vendor == 'postgresql', 'PostgreSQL specific')
+ def test_alter_char_field_decrease_length(self):
+ # Create the table.
+ with connection.schema_editor() as editor:
+ editor.create_model(Author)
+ Author.objects.create(name='x' * 255)
+ # Change max_length of CharField.
+ old_field = Author._meta.get_field('name')
+ new_field = CharField(max_length=254)
+ new_field.set_attributes_from_name('name')
+ with connection.schema_editor() as editor:
+ msg = 'value too long for type character varying(254)'
+ with self.assertRaisesMessage(DataError, msg):
+ editor.alter_field(Author, old_field, new_field, strict=True)
+
def test_alter_textfield_to_null(self):
"""
#24307 - Should skip an alter statement on databases with