diff options
| author | David Wobrock <david.wobrock@gmail.com> | 2022-07-02 19:55:37 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-07-08 07:05:55 +0200 |
| commit | 41019e48bbf082c985e6ba3bad34d118b903bff1 (patch) | |
| tree | 63e08889847484c233e690c81375f7a4e73eec18 /tests/check_framework | |
| parent | 57793b47657ace966ce8ce96d801ac0d85e5efc6 (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.py | 101 |
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", + ) + ], + ) |
