diff options
| author | Pankrat <lhaehne@gmail.com> | 2016-01-30 21:46:28 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-02-05 09:09:05 -0500 |
| commit | f91a04621ea8d7a657ff755645d823026257e898 (patch) | |
| tree | 2b06f3ce1cbb8e5f04499838154cf715ff76ce5b /tests/migrations/test_executor.py | |
| parent | 0edb8a146fd6c60f4c3b1ad0a4a89963962f22af (diff) | |
Fixed #25833 -- Added support for non-atomic migrations.
Added the Migration.atomic attribute which can be set to False
for non-atomic migrations.
Diffstat (limited to 'tests/migrations/test_executor.py')
| -rw-r--r-- | tests/migrations/test_executor.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/migrations/test_executor.py b/tests/migrations/test_executor.py index 1bbed48e3c..b51e7be90e 100644 --- a/tests/migrations/test_executor.py +++ b/tests/migrations/test_executor.py @@ -100,6 +100,33 @@ class ExecutorTests(MigrationTestBase): self.assertTableNotExists("migrations_author") self.assertTableNotExists("migrations_book") + @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_non_atomic"}) + def test_non_atomic_migration(self): + """ + Applying a non-atomic migration works as expected. + """ + executor = MigrationExecutor(connection) + with self.assertRaisesMessage(RuntimeError, "Abort migration"): + executor.migrate([("migrations", "0001_initial")]) + self.assertTableExists("migrations_publisher") + migrations_apps = executor.loader.project_state(("migrations", "0001_initial")).apps + Publisher = migrations_apps.get_model("migrations", "Publisher") + self.assertTrue(Publisher.objects.exists()) + self.assertTableNotExists("migrations_book") + + @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_atomic_operation"}) + def test_atomic_operation_in_non_atomic_migration(self): + """ + An atomic operation is properly rolled back inside a non-atomic + migration. + """ + executor = MigrationExecutor(connection) + with self.assertRaisesMessage(RuntimeError, "Abort migration"): + executor.migrate([("migrations", "0001_initial")]) + migrations_apps = executor.loader.project_state(("migrations", "0001_initial")).apps + Editor = migrations_apps.get_model("migrations", "Editor") + self.assertFalse(Editor.objects.exists()) + @override_settings(MIGRATION_MODULES={ "migrations": "migrations.test_migrations", "migrations2": "migrations2.test_migrations_2", |
