Skip to content

Commit 58f8ca3

Browse files
committed
Add migration to delete contract signatures
1 parent ab9c372 commit 58f8ca3

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 5.0.13 on 2025-06-20 12:09
2+
# Contract signatures will not be valid as v1.4.1 contracts change how they are validated
3+
# Contract signatures must be deleted from database to prevent issues
4+
5+
from django.db import migrations
6+
7+
from safe_eth.safe.safe_signature import SafeSignatureType
8+
9+
10+
def delete_safe_message_contract_confirmations(apps, schema_editor):
11+
SafeMessageConfirmation = apps.get_model("safe_messages", "SafeMessageConfirmation")
12+
SafeMessageConfirmation.objects.filter(
13+
signature_type=SafeSignatureType.CONTRACT_SIGNATURE.value
14+
).delete()
15+
16+
17+
class Migration(migrations.Migration):
18+
19+
dependencies = [
20+
("safe_messages", "0005_safemessage_origin"),
21+
]
22+
23+
operations = [
24+
migrations.RunPython(
25+
delete_safe_message_contract_confirmations,
26+
reverse_code=migrations.RunPython.noop,
27+
),
28+
]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,66 @@
1+
from unittest import mock
2+
from unittest.mock import PropertyMock
3+
14
from django.test import TestCase
25

36
from django_test_migrations.migrator import Migrator
7+
from safe_eth.safe import Safe
8+
from safe_eth.safe.safe_signature import SafeSignatureType
9+
10+
from safe_transaction_service.safe_messages.tests.factories import (
11+
SafeMessageConfirmationFactory,
12+
)
413

514

615
class TestMigrations(TestCase):
716
def setUp(self) -> None:
817
self.migrator = Migrator(database="default")
18+
19+
@mock.patch.object(
20+
Safe, "domain_separator", new_callable=mock.PropertyMock, return_value=b"23"
21+
)
22+
def test_migration_forward_0006_remove_contract_signatures(
23+
self, domain_separator_mock: PropertyMock
24+
):
25+
old_state = self.migrator.apply_initial_migration(
26+
("safe_messages", "0005_safemessage_origin")
27+
)
28+
SafeMessageConfirmationFactory(
29+
signature_type=SafeSignatureType.CONTRACT_SIGNATURE.value
30+
)
31+
SafeMessageConfirmationFactory(signature_type=SafeSignatureType.EOA.value)
32+
SafeMessageConfirmationFactory(
33+
signature_type=SafeSignatureType.APPROVED_HASH.value
34+
)
35+
SafeMessageConfirmationFactory(
36+
signature_type=SafeSignatureType.CONTRACT_SIGNATURE.value
37+
)
38+
39+
SafeMessageOld = old_state.apps.get_model("safe_messages", "SafeMessage")
40+
SafeMessageConfirmationOld = old_state.apps.get_model(
41+
"safe_messages", "SafeMessageConfirmation"
42+
)
43+
self.assertEqual(SafeMessageOld.objects.count(), 4)
44+
self.assertEqual(SafeMessageConfirmationOld.objects.count(), 4)
45+
self.assertEqual(
46+
SafeMessageConfirmationOld.objects.filter(
47+
signature_type=SafeSignatureType.CONTRACT_SIGNATURE.value
48+
).count(),
49+
2,
50+
)
51+
52+
new_state = self.migrator.apply_tested_migration(
53+
("safe_messages", "0006_remove_contract_signatures"),
54+
)
55+
SafeMessageNew = old_state.apps.get_model("safe_messages", "SafeMessage")
56+
SafeMessageConfirmationNew = new_state.apps.get_model(
57+
"safe_messages", "SafeMessageConfirmation"
58+
)
59+
self.assertEqual(SafeMessageNew.objects.count(), 4)
60+
self.assertEqual(SafeMessageConfirmationNew.objects.count(), 2)
61+
self.assertEqual(
62+
SafeMessageConfirmationNew.objects.filter(
63+
signature_type=SafeSignatureType.CONTRACT_SIGNATURE.value
64+
).count(),
65+
0,
66+
)

0 commit comments

Comments
 (0)