summaryrefslogtreecommitdiff
path: root/tests/migrations/test_executor.py
diff options
context:
space:
mode:
authorPankrat <lhaehne@gmail.com>2016-01-30 21:46:28 +0100
committerTim Graham <timograham@gmail.com>2016-02-05 09:09:05 -0500
commitf91a04621ea8d7a657ff755645d823026257e898 (patch)
tree2b06f3ce1cbb8e5f04499838154cf715ff76ce5b /tests/migrations/test_executor.py
parent0edb8a146fd6c60f4c3b1ad0a4a89963962f22af (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.py27
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",