Skip to content

Commit

Permalink
Add test for confirm_message
Browse files Browse the repository at this point in the history
  • Loading branch information
moisses89 committed Jun 19, 2024
1 parent 3d252bc commit 53e6bff
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 12 deletions.
21 changes: 10 additions & 11 deletions src/safe_cli/operators/safe_tx_service_operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,20 +124,19 @@ def confirm_message(self, safe_message_hash: bytes, sender: ChecksumAddress):
)
return False

if self.safe_tx_service.post_message_signature(safe_message_hash, signature):
try:
self.safe_tx_service.post_message_signature(safe_message_hash, signature)
except SafeAPIException as e:
print_formatted_text(
HTML(
"<ansigreen>Message was correctly confirmed on Safe Transaction Service</ansigreen>"
)
)
return True
else:
print_formatted_text(
HTML(
"<ansired>Something went wrong confirming message on Safe Transaction Service</ansired>"
)
HTML(f"<ansired>Message wasn't confirmed due an error: {e}</ansired>")
)
return False
print_formatted_text(
HTML(
"<ansigreen>Message was correctly confirmed on Safe Transaction Service</ansigreen>"
)
)
return True

def get_delegates(self):
delegates = self.safe_tx_service.get_delegates(self.address)
Expand Down
33 changes: 32 additions & 1 deletion tests/test_safe_tx_service_operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from gnosis.eth import EthereumClient
from gnosis.safe import SafeTx
from gnosis.safe.api import TransactionServiceApi
from gnosis.safe.api import SafeAPIException, TransactionServiceApi

from safe_cli.operators import SafeOperatorMode, SafeTxServiceOperator

Expand Down Expand Up @@ -551,6 +551,37 @@ def test_data_decoded_to_text(self):
decoded_data_text,
)

@mock.patch.object(
TransactionServiceApi, "post_message_signature", return_value=True
)
@mock.patch.object(TransactionServiceApi, "get_message", return_value=None)
def test_confirm_message(
self, get_message: MagicMock, post_message_signature: MagicMock
):
safe_operator = self.setup_operator(
number_owners=1, mode=SafeOperatorMode.TX_SERVICE
)
# confirm_message just need the raw message to print
get_message.return_value = {"message": "We just need a message"}
safe_message_hash = HexBytes(
"0xfbf5d6f7faaec8fd7770cb532f87e38fb82ecb47f58474cbeb29a174f1afd829"
)
expected_signature = HexBytes(
"0x82484cd1f17430915f940d7c589e1687253de7f4062748b6807d29c67af52e3957b90427a9202ba4bc2104a129183387d994be2e4a8623a1f1ba2bad75d3546d1b"
)
sender = list(safe_operator.accounts)[0]
self.assertTrue(
safe_operator.confirm_message(safe_message_hash, sender.address)
)
post_message_signature.assert_called_with(safe_message_hash, expected_signature)

post_message_signature.side_effect = SafeAPIException(
"Error posting message signature"
)
self.assertFalse(
safe_operator.confirm_message(safe_message_hash, sender.address)
)

def test_drain(self):
# TODO Drain is a complex to mock
pass
Expand Down

0 comments on commit 53e6bff

Please sign in to comment.