浏览代码

Refs #22983 -- Added tests for squashing migrations with functions from migration files.

Follow up to ebb13bbd884d8c3053d1d342ef0423240feb05e6.
Mariusz Felisiak 3 年之前
父节点
当前提交
2d07e1aaeb

+ 36 - 0
tests/migrations/test_commands.py

@@ -2131,6 +2131,42 @@ class SquashMigrationsTests(MigrationTestBase):
                     squashed_name='initial', interactive=False, verbosity=0,
                 )
 
+    def test_squashmigrations_manual_porting(self):
+        out = io.StringIO()
+        with self.temporary_migration_module(
+            module='migrations.test_migrations_manual_porting',
+        ) as migration_dir:
+            call_command(
+                'squashmigrations',
+                'migrations',
+                '0002',
+                interactive=False,
+                stdout=out,
+                no_color=True,
+            )
+            squashed_migration_file = os.path.join(
+                migration_dir,
+                '0001_squashed_0002_second.py',
+            )
+            self.assertTrue(os.path.exists(squashed_migration_file))
+        self.assertEqual(
+            out.getvalue(),
+            f'Will squash the following migrations:\n'
+            f' - 0001_initial\n'
+            f' - 0002_second\n'
+            f'Optimizing...\n'
+            f'  No optimizations possible.\n'
+            f'Created new squashed migration {squashed_migration_file}\n'
+            f'  You should commit this migration but leave the old ones in place;\n'
+            f'  the new migration will be used for new installs. Once you are sure\n'
+            f'  all instances of the codebase have applied the migrations you squashed,\n'
+            f'  you can delete them.\n'
+            f'Manual porting required\n'
+            f'  Your migrations contained functions that must be manually copied over,\n'
+            f'  as we could not safely copy their implementation.\n'
+            f'  See the comment at the top of the squashed migration for details.\n'
+        )
+
 
 class AppLabelErrorTests(TestCase):
     """

+ 15 - 0
tests/migrations/test_migrations_manual_porting/0001_initial.py

@@ -0,0 +1,15 @@
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    initial = True
+
+    operations = [
+        migrations.CreateModel(
+            'SomeModel',
+            [
+                ('id', models.AutoField(primary_key=True)),
+                ('name', models.CharField(max_length=255)),
+            ],
+        ),
+    ]

+ 15 - 0
tests/migrations/test_migrations_manual_porting/0002_second.py

@@ -0,0 +1,15 @@
+from django.db import migrations
+
+
+def forwards(apps, schema_editor):
+    pass
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ('migrations', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RunPython(forwards, migrations.RunPython.noop),
+    ]

+ 0 - 0
tests/migrations/test_migrations_manual_porting/__init__.py