Skip to content

Commit 75b87f5

Browse files
committed
fixing bug when dropping columns with auto migrations, and added test
1 parent e0ce22d commit 75b87f5

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

piccolo/apps/migrations/auto/migration_manager.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ class DropColumnCollection:
6060
def append(self, drop_column: DropColumn):
6161
self.drop_columns.append(drop_column)
6262

63-
def for_table_class_name(self, table_class_name: str) -> t.List[str]:
63+
def for_table_class_name(
64+
self, table_class_name: str
65+
) -> t.List[DropColumn]:
6466
return [
65-
i.column_name
67+
i
6668
for i in self.drop_columns
6769
if i.table_class_name == table_class_name
6870
]

tests/apps/migrations/auto/test_migration_manager.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,41 @@ def test_add_non_nullable_column(self):
172172
)
173173
asyncio.run(manager.run())
174174

175+
@postgres_only
176+
@patch.object(BaseMigrationManager, "get_migration_managers")
177+
def test_drop_column(self, get_migration_managers: MagicMock):
178+
"""
179+
Test dropping a column with MigrationManager.
180+
"""
181+
manager_1 = MigrationManager()
182+
name_column = Varchar()
183+
name_column._meta.name = "name"
184+
manager_1.add_table(
185+
class_name="Musician", tablename="musician", columns=[name_column]
186+
)
187+
asyncio.run(manager_1.run())
188+
189+
self.run_sync("INSERT INTO musician VALUES (default, 'Dave');")
190+
response = self.run_sync("SELECT * FROM musician;")
191+
self.assertEqual(response, [{"id": 1, "name": "Dave"}])
192+
193+
manager_2 = MigrationManager()
194+
manager_2.drop_column(
195+
table_class_name="Musician",
196+
tablename="musician",
197+
column_name="name",
198+
)
199+
asyncio.run(manager_2.run())
200+
201+
response = self.run_sync("SELECT * FROM musician;")
202+
self.assertEqual(response, [{"id": 1}])
203+
204+
# Reverse
205+
get_migration_managers.return_value = [manager_1]
206+
asyncio.run(manager_2.run_backwards())
207+
response = self.run_sync("SELECT * FROM musician;")
208+
self.assertEqual(response, [{"id": 1, "name": ""}])
209+
175210
@postgres_only
176211
def test_rename_table(self):
177212
"""

0 commit comments

Comments
 (0)