summaryrefslogtreecommitdiff
path: root/tests/migrations
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2024-12-27 13:55:42 +0100
committerGitHub <noreply@github.com>2024-12-27 09:55:42 -0300
commitc534b6c4938cd817e5d7903dce15a689a4862a99 (patch)
tree6cd1f952b38f430b8cff1fd8abf3618d3b4e93bf /tests/migrations
parent733d3998e2b452ace5c4382a9f6efa698b576383 (diff)
Fixed #35991 -- Fixed crash when adding non-nullable field after renaming part of CompositePrimaryKey on SQLite.
Diffstat (limited to 'tests/migrations')
-rw-r--r--tests/migrations/test_operations.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py
index d95e382285..2ca8da31f7 100644
--- a/tests/migrations/test_operations.py
+++ b/tests/migrations/test_operations.py
@@ -3375,6 +3375,42 @@ class OperationTests(OperationTestBase):
)
self.assertIndexExists("test_rnflit_pony", ["weight", "pink"])
+ def test_rename_field_add_non_nullable_field_with_composite_pk(self):
+ app_label = "test_rnfafnnwcpk"
+ operations = [
+ migrations.CreateModel(
+ name="Release",
+ fields=[
+ (
+ "pk",
+ models.CompositePrimaryKey("version", "name", primary_key=True),
+ ),
+ ("version", models.IntegerField()),
+ ("name", models.CharField(max_length=20)),
+ ],
+ ),
+ ]
+ project_state = self.apply_operations(app_label, ProjectState(), operations)
+ new_state = project_state.clone()
+ # Rename field used by CompositePrimaryKey.
+ operation = migrations.RenameField("Release", "name", "renamed_field")
+ operation.state_forwards(app_label, new_state)
+ with connection.schema_editor() as editor:
+ operation.database_forwards(app_label, editor, project_state, new_state)
+ self.assertColumnExists(f"{app_label}_release", "renamed_field")
+ project_state = new_state
+ new_state = new_state.clone()
+ # Add non-nullable field. Table is rebuilt on SQLite.
+ operation = migrations.AddField(
+ model_name="Release",
+ name="new_non_nullable_field",
+ field=models.CharField(default="x", max_length=20),
+ )
+ operation.state_forwards(app_label, new_state)
+ with connection.schema_editor() as editor:
+ operation.database_forwards(app_label, editor, project_state, new_state)
+ self.assertColumnExists(f"{app_label}_release", "new_non_nullable_field")
+
def test_rename_field_with_db_column(self):
project_state = self.apply_operations(
"test_rfwdbc",