summaryrefslogtreecommitdiff
path: root/tests/schema
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2014-08-04 11:58:44 +1000
committerAndrew Godwin <andrew@aeracode.org>2014-08-04 11:59:48 +1000
commita918c60c378b575ca52ebcfae977056b8bc5a4de (patch)
tree6ca3ec8882bea8a286cdc4726283a031ea31dde1 /tests/schema
parent99f3a65c730f643d35d959aa9a693101b2d21efd (diff)
[1.7.x] Fixed #23091: CreateModel and AddField were clashing with deferred SQL
Diffstat (limited to 'tests/schema')
-rw-r--r--tests/schema/tests.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index 0bbf4302c9..64726aff4e 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -331,6 +331,48 @@ class SchemaTests(TransactionTestCase):
self.assertEqual(columns['name'][0], "TextField")
self.assertEqual(bool(columns['name'][1][6]), False)
+ @unittest.skipUnless(connection.features.supports_foreign_keys, "No FK support")
+ def test_alter_fk(self):
+ """
+ Tests altering of FKs
+ """
+ # Create the table
+ with connection.schema_editor() as editor:
+ editor.create_model(Author)
+ editor.create_model(Book)
+ # Ensure the field is right to begin with
+ columns = self.column_classes(Book)
+ self.assertEqual(columns['author_id'][0], "IntegerField")
+ # Make sure the FK constraint is present
+ constraints = self.get_constraints(Book._meta.db_table)
+ for name, details in constraints.items():
+ if details['columns'] == ["author_id"] and details['foreign_key']:
+ self.assertEqual(details['foreign_key'], ('schema_author', 'id'))
+ break
+ else:
+ self.fail("No FK constraint for author_id found")
+ # Alter the FK
+ new_field = ForeignKey(Author, editable=False)
+ new_field.set_attributes_from_name("author")
+ with connection.schema_editor() as editor:
+ editor.alter_field(
+ Book,
+ Book._meta.get_field_by_name("author")[0],
+ new_field,
+ strict=True,
+ )
+ # Ensure the field is right afterwards
+ columns = self.column_classes(Book)
+ self.assertEqual(columns['author_id'][0], "IntegerField")
+ # Make sure the FK constraint is present
+ constraints = self.get_constraints(Book._meta.db_table)
+ for name, details in constraints.items():
+ if details['columns'] == ["author_id"] and details['foreign_key']:
+ self.assertEqual(details['foreign_key'], ('schema_author', 'id'))
+ break
+ else:
+ self.fail("No FK constraint for author_id found")
+
def test_rename(self):
"""
Tests simple altering of fields