From 7f4c9222dfe2f28ff8a7ffc56c28ccbadf19cf6f Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 24 Jul 2020 18:08:40 -0300 Subject: Fixed #31825 -- Made RenameField operation a noop for fields with db_column. --- tests/migrations/test_operations.py | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'tests') diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index 588186fae4..6abbd34ab8 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -1632,6 +1632,48 @@ class OperationTests(OperationTestBase): self.assertEqual(definition[1], []) self.assertEqual(definition[2], {'model_name': "Pony", 'old_name': "pink", 'new_name': "blue"}) + def test_rename_field_with_db_column(self): + project_state = self.apply_operations('test_rfwdbc', ProjectState(), operations=[ + migrations.CreateModel('Pony', fields=[ + ('id', models.AutoField(primary_key=True)), + ('field', models.IntegerField(db_column='db_field')), + ('fk_field', models.ForeignKey( + 'Pony', + models.CASCADE, + db_column='db_fk_field', + )), + ]), + ]) + new_state = project_state.clone() + operation = migrations.RenameField('Pony', 'field', 'renamed_field') + operation.state_forwards('test_rfwdbc', new_state) + self.assertIn('renamed_field', new_state.models['test_rfwdbc', 'pony'].fields) + self.assertNotIn('field', new_state.models['test_rfwdbc', 'pony'].fields) + self.assertColumnExists('test_rfwdbc_pony', 'db_field') + with connection.schema_editor() as editor: + with self.assertNumQueries(0): + operation.database_forwards('test_rfwdbc', editor, project_state, new_state) + self.assertColumnExists('test_rfwdbc_pony', 'db_field') + with connection.schema_editor() as editor: + with self.assertNumQueries(0): + operation.database_backwards('test_rfwdbc', editor, new_state, project_state) + self.assertColumnExists('test_rfwdbc_pony', 'db_field') + + new_state = project_state.clone() + operation = migrations.RenameField('Pony', 'fk_field', 'renamed_fk_field') + operation.state_forwards('test_rfwdbc', new_state) + self.assertIn('renamed_fk_field', new_state.models['test_rfwdbc', 'pony'].fields) + self.assertNotIn('fk_field', new_state.models['test_rfwdbc', 'pony'].fields) + self.assertColumnExists('test_rfwdbc_pony', 'db_fk_field') + with connection.schema_editor() as editor: + with self.assertNumQueries(0): + operation.database_forwards('test_rfwdbc', editor, project_state, new_state) + self.assertColumnExists('test_rfwdbc_pony', 'db_fk_field') + with connection.schema_editor() as editor: + with self.assertNumQueries(0): + operation.database_backwards('test_rfwdbc', editor, new_state, project_state) + self.assertColumnExists('test_rfwdbc_pony', 'db_fk_field') + def test_rename_missing_field(self): state = ProjectState() state.add_model(ModelState('app', 'model', [])) -- cgit v1.3