diff --git a/tests/app/tests/migrations/xxx/0001_initial.py b/tests/app/tests/migrations/xxx/0001_initial.py new file mode 100644 index 0000000..3a3ab21 --- /dev/null +++ b/tests/app/tests/migrations/xxx/0001_initial.py @@ -0,0 +1,44 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("app3", "0001_inital"), + ] + + operations = [ + migrations.CreateModel( + name="TranscodeJob", + fields=[ + ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("created_at", models.DateTimeField(auto_now_add=True, db_index=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("job_id", models.CharField(max_length=50, unique=True)), + ( + "status", + models.CharField( + choices=[ + ("S", "Submitted"), + ("P", "Progressing"), + ("C", "Complete"), + ("X", "Canceled"), + ("E", "Error"), + ("U", "Unknown"), + ], + default="S", + max_length=1, + ), + ), + ("initial_response_data", models.TextField()), + ("final_response_data", models.TextField()), + ("video", models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to="app3.Person")), + ], + options={ + "abstract": False, + }, + ), + ] diff --git a/tests/app/tests/migrations/xxx/0002_auto.py b/tests/app/tests/migrations/xxx/0002_auto.py new file mode 100644 index 0000000..3ea7f8b --- /dev/null +++ b/tests/app/tests/migrations/xxx/0002_auto.py @@ -0,0 +1,58 @@ +import django.contrib.contenttypes.models +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("app", "0001_initial"), + ] + + def forwards_func(apps, schema_editor): + return + + operations = [ + migrations.AddField( + model_name="transcodejob", + name="content_type", + field=models.IntegerField(null=True, verbose_name=django.contrib.contenttypes.models.ContentType), + ), + migrations.AddField( + model_name="transcodejob", + name="object_id", + field=models.BigIntegerField(null=True), + ), + migrations.AlterField( + model_name="transcodejob", + name="job_id", + field=models.CharField(max_length=50, null=True, unique=True), + ), + migrations.AlterField( + model_name="transcodejob", + name="status", + field=models.CharField( + choices=[ + ("R", "Ready"), + ("S", "Submitted"), + ("P", "Progressing"), + ("C", "Complete"), + ("X", "Canceled"), + ("E", "Error"), + ("U", "Unknown"), + ], + default="S", + max_length=1, + ), + ), + migrations.AlterField( + model_name="transcodejob", + name="video", + field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to="app3.Person"), + ), + migrations.AlterIndexTogether( + name="transcodejob", + index_together=set([("content_type", "object_id")]), + ), + migrations.RunPython(forwards_func, reverse_code=migrations.RunPython.noop), + ] diff --git a/tests/app/tests/migrations/xxx/__init__.py b/tests/app/tests/migrations/xxx/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_migrations.py b/tests/test_migrations.py index d5d5a4d..eaba959 100644 --- a/tests/test_migrations.py +++ b/tests/test_migrations.py @@ -593,6 +593,47 @@ class Migration(migrations.Migration): assert migration_app_dir.migration_read("0003_squashed.py", "") == expected +@pytest.mark.temporary_migration_module(module="app.tests.migrations.xxx", app_label="app") +@pytest.mark.temporary_migration_module2(module="app3.tests.migrations.moved", app_label="app3") +def test_nested(migration_app_dir, migration_app2_dir, call_squash_migrations, settings): + from django.contrib.contenttypes.fields import GenericForeignKey + from django.contrib.contenttypes.models import ContentType + + class TranscodeJob(models.Model): + + STATUS_CHOICES = ( + ("R", "Ready"), + ("S", "Submitted"), + ("P", "Progressing"), + ("C", "Complete"), + ("X", "Canceled"), + ("E", "Error"), + ("U", "Unknown"), + ) + + content_type = models.IntegerField(ContentType, null=True) + object_id = models.BigIntegerField(null=True) + content_object = GenericForeignKey("content_type", "object_id") + + video = models.OneToOneField("app3.Person", on_delete=models.CASCADE, null=True) + job_id = models.CharField(max_length=50, unique=True, null=True) + status = models.CharField(max_length=1, choices=STATUS_CHOICES, default="S") + initial_response_data = models.TextField() + final_response_data = models.TextField() + + class Meta: + app_label = "app" + + class Person(models.Model): + name = models.CharField(max_length=10) + dob = models.DateField() + + class Meta: + app_label = "app3" + + call_squash_migrations() + + @pytest.mark.temporary_migration_module(module="app.tests.migrations.pg_indexes", app_label="app") def test_squashing_migration_pg_indexes(migration_app_dir, call_squash_migrations):