summaryrefslogtreecommitdiff
path: root/tests/check_framework
diff options
context:
space:
mode:
authorDavid Wobrock <david.wobrock@gmail.com>2022-07-02 19:55:37 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-07-08 07:05:55 +0200
commit41019e48bbf082c985e6ba3bad34d118b903bff1 (patch)
tree63e08889847484c233e690c81375f7a4e73eec18 /tests/check_framework
parent57793b47657ace966ce8ce96d801ac0d85e5efc6 (diff)
Refs #27236 -- Added generic mechanism to handle the deprecation of migration operations.
Diffstat (limited to 'tests/check_framework')
-rw-r--r--tests/check_framework/test_migrations.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/check_framework/test_migrations.py b/tests/check_framework/test_migrations.py
new file mode 100644
index 0000000000..0b00690e77
--- /dev/null
+++ b/tests/check_framework/test_migrations.py
@@ -0,0 +1,101 @@
+from django.core import checks
+from django.db import migrations
+from django.db.migrations.operations.base import Operation
+from django.test import TestCase
+
+
+class DeprecatedMigrationOperationTests(TestCase):
+ def test_default_operation(self):
+ class MyOperation(Operation):
+ system_check_deprecated_details = {}
+
+ my_operation = MyOperation()
+
+ class Migration(migrations.Migration):
+ operations = [my_operation]
+
+ self.assertEqual(
+ Migration("name", "app_label").check(),
+ [
+ checks.Warning(
+ msg="MyOperation has been deprecated.",
+ obj=my_operation,
+ id="migrations.WXXX",
+ )
+ ],
+ )
+
+ def test_user_specified_details(self):
+ class MyOperation(Operation):
+ system_check_deprecated_details = {
+ "msg": "This operation is deprecated and will be removed soon.",
+ "hint": "Use something else.",
+ "id": "migrations.W999",
+ }
+
+ my_operation = MyOperation()
+
+ class Migration(migrations.Migration):
+ operations = [my_operation]
+
+ self.assertEqual(
+ Migration("name", "app_label").check(),
+ [
+ checks.Warning(
+ msg="This operation is deprecated and will be removed soon.",
+ obj=my_operation,
+ hint="Use something else.",
+ id="migrations.W999",
+ )
+ ],
+ )
+
+
+class RemovedMigrationOperationTests(TestCase):
+ def test_default_operation(self):
+ class MyOperation(Operation):
+ system_check_removed_details = {}
+
+ my_operation = MyOperation()
+
+ class Migration(migrations.Migration):
+ operations = [my_operation]
+
+ self.assertEqual(
+ Migration("name", "app_label").check(),
+ [
+ checks.Error(
+ msg=(
+ "MyOperation has been removed except for support in historical "
+ "migrations."
+ ),
+ obj=my_operation,
+ id="migrations.EXXX",
+ )
+ ],
+ )
+
+ def test_user_specified_details(self):
+ class MyOperation(Operation):
+ system_check_removed_details = {
+ "msg": "Support for this operation is gone.",
+ "hint": "Use something else.",
+ "id": "migrations.E999",
+ }
+
+ my_operation = MyOperation()
+
+ class Migration(migrations.Migration):
+ operations = [my_operation]
+
+ self.assertEqual(
+ Migration("name", "app_label").check(),
+ [
+ checks.Error(
+ msg="Support for this operation is gone.",
+ obj=my_operation,
+ hint="Use something else.",
+ id="migrations.E999",
+ )
+ ],
+ )