diff options
| author | Simon Charette <charette.s@gmail.com> | 2016-05-22 20:35:10 -0400 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2016-05-26 13:32:02 -0400 |
| commit | dfae72f45a74b8fe3a08fe0a48c11bfeb9b9efda (patch) | |
| tree | 0316b8a24cb7c97b7c654c74c7620821d90ca9aa /tests/migrations | |
| parent | 699e43b017b01ab2ef9f1e7a5a75c50a20956485 (diff) | |
[1.10.x] Fixed #26647 -- Included the state of all applied migrations when migrating forward.
Thanks Jasper Maes for the detailed report.
Backport of 36d36818a30025034cad6f1ee59b2a960a6582ec from master
Diffstat (limited to 'tests/migrations')
8 files changed, 92 insertions, 0 deletions
diff --git a/tests/migrations/migrations_test_apps/mutate_state_a/__init__.py b/tests/migrations/migrations_test_apps/mutate_state_a/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_a/__init__.py diff --git a/tests/migrations/migrations_test_apps/mutate_state_a/migrations/0001_initial.py b/tests/migrations/migrations_test_apps/mutate_state_a/migrations/0001_initial.py new file mode 100644 index 0000000000..5fac74abf3 --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_a/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mutate_state_b', '0001_initial'), + ] + + operations = [ + migrations.SeparateDatabaseAndState([], [ + migrations.CreateModel( + name='A', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ], + ), + ]) + ] diff --git a/tests/migrations/migrations_test_apps/mutate_state_a/migrations/__init__.py b/tests/migrations/migrations_test_apps/mutate_state_a/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_a/migrations/__init__.py diff --git a/tests/migrations/migrations_test_apps/mutate_state_b/__init__.py b/tests/migrations/migrations_test_apps/mutate_state_b/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_b/__init__.py diff --git a/tests/migrations/migrations_test_apps/mutate_state_b/migrations/0001_initial.py b/tests/migrations/migrations_test_apps/mutate_state_b/migrations/0001_initial.py new file mode 100644 index 0000000000..73f436b20d --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_b/migrations/0001_initial.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.SeparateDatabaseAndState([], [ + migrations.CreateModel( + name='B', + fields=[ + ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), + ], + ), + ]) + ] diff --git a/tests/migrations/migrations_test_apps/mutate_state_b/migrations/0002_add_field.py b/tests/migrations/migrations_test_apps/mutate_state_b/migrations/0002_add_field.py new file mode 100644 index 0000000000..45aca30740 --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_b/migrations/0002_add_field.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mutate_state_b', '0001_initial'), + ] + + operations = [ + migrations.SeparateDatabaseAndState([], [ + migrations.AddField( + model_name='B', + name='added', + field=models.TextField(), + ), + ]) + ] diff --git a/tests/migrations/migrations_test_apps/mutate_state_b/migrations/__init__.py b/tests/migrations/migrations_test_apps/mutate_state_b/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/migrations/migrations_test_apps/mutate_state_b/migrations/__init__.py diff --git a/tests/migrations/test_executor.py b/tests/migrations/test_executor.py index b51e7be90e..7c33c1be5c 100644 --- a/tests/migrations/test_executor.py +++ b/tests/migrations/test_executor.py @@ -477,6 +477,34 @@ class ExecutorTests(MigrationTestBase): self.assertTableNotExists("lookuperror_b_b1") self.assertTableNotExists("lookuperror_c_c1") + @override_settings( + INSTALLED_APPS=[ + 'migrations.migrations_test_apps.mutate_state_a', + 'migrations.migrations_test_apps.mutate_state_b', + ] + ) + def test_unrelated_applied_migrations_mutate_state(self): + """ + #26647 - Unrelated applied migrations should be part of the final + state in both directions. + """ + executor = MigrationExecutor(connection) + executor.migrate([ + ('mutate_state_b', '0002_add_field'), + ]) + # Migrate forward. + executor.loader.build_graph() + state = executor.migrate([ + ('mutate_state_a', '0001_initial'), + ]) + self.assertIn('added', dict(state.models['mutate_state_b', 'b'].fields)) + executor.loader.build_graph() + # Migrate backward. + state = executor.migrate([ + ('mutate_state_a', None), + ]) + self.assertIn('added', dict(state.models['mutate_state_b', 'b'].fields)) + @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"}) def test_process_callback(self): """ |
