• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-eth-py / 10629724120

30 Aug 2024 08:49AM UTC coverage: 93.903%. Remained the same
10629724120

Pull #1309

github

web-flow
Merge 175bdc70e into d0479e88e
Pull Request #1309: Add reference to main in safe-eth-py dependency in addresses actions

8671 of 9234 relevant lines covered (93.9%)

3.76 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.94
/safe_eth/eth/tests/clients/test_etherscan_client.py
1
import os
4✔
2

3
from django.test import TestCase
4✔
4

5
import pytest
4✔
6

7
from ... import EthereumNetwork
4✔
8
from ...clients import EtherscanClient, EtherscanRateLimitError
4✔
9
from .mocks import etherscan_multisend_abi, sourcify_safe_metadata
4✔
10

11

12
class TestEtherscanClient(TestCase):
4✔
13
    @classmethod
4✔
14
    def get_etherscan_api(cls, network: EthereumNetwork):
4✔
15
        etherscan_api_key_variable_name = "ETHERSCAN_API_KEY"
4✔
16
        etherscan_api_key = os.environ.get(etherscan_api_key_variable_name)
4✔
17
        if not etherscan_api_key:
4✔
18
            pytest.skip(f"{etherscan_api_key_variable_name} needs to be defined")
×
19

20
        return EtherscanClient(network, api_key=etherscan_api_key)
4✔
21

22
    def test_etherscan_get_abi(self):
4✔
23
        try:
4✔
24
            etherscan_api = self.get_etherscan_api(EthereumNetwork.MAINNET)
4✔
25
            safe_master_copy_abi = sourcify_safe_metadata["output"]["abi"]
4✔
26
            safe_master_copy_address = "0x6851D6fDFAfD08c0295C392436245E5bc78B0185"
4✔
27
            self.assertEqual(
4✔
28
                etherscan_api.get_contract_abi(safe_master_copy_address),
29
                safe_master_copy_abi,
30
            )
31

32
            contract_metadata = etherscan_api.get_contract_metadata(
4✔
33
                safe_master_copy_address
34
            )
35
            self.assertEqual(contract_metadata.name, "GnosisSafe")
4✔
36
            self.assertEqual(contract_metadata.abi, safe_master_copy_abi)
4✔
37

38
            random_address = "0xaE32496491b53841efb51829d6f886387708F99a"
4✔
39
            self.assertIsNone(etherscan_api.get_contract_abi(random_address))
4✔
40
            self.assertIsNone(etherscan_api.get_contract_metadata(random_address))
4✔
41
        except EtherscanRateLimitError:
1✔
42
            self.skipTest("Etherscan rate limit reached")
×
43

44
    @pytest.mark.xfail(reason="Test might fail due to third-party service issues")
4✔
45
    def test_etherscan_get_abi_zksync(self):
4✔
46
        multisend_address = "0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912"
4✔
47
        etherscan_api = self.get_etherscan_api(EthereumNetwork(324))
4✔
48
        self.assertEqual(
4✔
49
            etherscan_api.get_contract_abi(multisend_address),
50
            etherscan_multisend_abi,
51
        )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc