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

safe-global / safe-eth-py / 17723951463

15 Sep 2025 06:20AM UTC coverage: 89.937% (-4.0%) from 93.974%
17723951463

Pull #1947

github

web-flow
Merge ad31bc77e into ee8dff1a4
Pull Request #1947: Bump mypy from 1.17.1 to 1.18.1

9223 of 10255 relevant lines covered (89.94%)

2.7 hits per line

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

39.53
/safe_eth/eth/tests/clients/test_ens_client.py
1
import os
3✔
2
from unittest import mock
3✔
3

4
from django.test import TestCase
3✔
5

6
import pytest
3✔
7
from eth_utils import keccak
3✔
8
from requests import Session
3✔
9

10
from ...clients import EnsClient
3✔
11

12

13
class TestEnsClient(TestCase):
3✔
14
    def setUp(self):
3✔
15
        ens_client_api_key_variable_name = "ENS_CLIENT_API_KEY"
3✔
16
        ens_client_api_key = os.environ.get(ens_client_api_key_variable_name)
3✔
17
        if not ens_client_api_key:
3✔
18
            pytest.skip(f"{ens_client_api_key_variable_name} needs to be defined")
3✔
19

20
        self.config = EnsClient.SubgraphConfig(
×
21
            base_url="https://gateway.thegraph.com",
22
            api_key=ens_client_api_key,
23
            subgraph_id="5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH",  # ENS subgraph (https://thegraph.com/explorer/subgraphs/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH)
24
        )
25

26
    def test_domain_hash_to_hex_str(self):
3✔
27
        domain_hash_bytes = keccak(text="gnosis")
×
28
        domain_hash_int = int.from_bytes(domain_hash_bytes, byteorder="big")
×
29

30
        result = EnsClient.domain_hash_to_hex_str(domain_hash_bytes)
×
31
        self.assertEqual(result, EnsClient.domain_hash_to_hex_str(domain_hash_int))
×
32
        self.assertEqual(len(result), 66)
×
33

34
        self.assertEqual(len(EnsClient.domain_hash_to_hex_str(b"")), 66)
×
35
        self.assertEqual(len(EnsClient.domain_hash_to_hex_str(None)), 66)
×
36
        self.assertEqual(len(EnsClient.domain_hash_to_hex_str(2)), 66)
×
37

38
    def test_query_by_account(self):
3✔
39
        ens_client = EnsClient(config=self.config)
×
40
        if not ens_client.is_available():
×
41
            self.skipTest("ENS Mainnet Client is not available")
×
42

43
        self.assertEqual(
×
44
            ens_client.query_by_account("0x70608b1809c93Ec57160C266a38322144E9A9d28"),
45
            {
46
                "registrations": [
47
                    {
48
                        "domain": {
49
                            "isMigrated": True,
50
                            "labelName": "safe-treasury",
51
                            "labelhash": "0x136ff778d0f4bb244b1284dd5835c78a9fb425680d3a75aab24db723042494af",
52
                            "name": "safe-treasury.eth",
53
                            "parent": {"name": "eth"},
54
                        },
55
                        "expiryDate": "1763372829",
56
                    },
57
                    {
58
                        "domain": {
59
                            "isMigrated": True,
60
                            "labelName": "gnosis-safe",
61
                            "labelhash": "0x162be7f136f104c8cc5ce333cdb2ef94fa8270f4ca186ba6083634b8b93efa82",
62
                            "name": "gnosis-safe.eth",
63
                            "parent": {"name": "eth"},
64
                        },
65
                        "expiryDate": "1775002833",
66
                    },
67
                    {
68
                        "domain": {
69
                            "isMigrated": True,
70
                            "labelName": "safelabs",
71
                            "labelhash": "0x2a539ee95e2c8d636de6e60ea4f8ea6a44b8d78593c53e849214f259c4b72b4e",
72
                            "name": "safelabs.eth",
73
                            "parent": {"name": "eth"},
74
                        },
75
                        "expiryDate": "1844142767",
76
                    },
77
                    {
78
                        "domain": {
79
                            "isMigrated": True,
80
                            "labelName": "safe-dao",
81
                            "labelhash": "0x3dcf430070cc5f52fbe66433a72fc6eed2860b28527f9016933599d41cbf6d9e",
82
                            "name": "safe-dao.eth",
83
                            "parent": {"name": "eth"},
84
                        },
85
                        "expiryDate": "1763371973",
86
                    },
87
                    {
88
                        "domain": {
89
                            "isMigrated": True,
90
                            "labelName": "safe-foundation",
91
                            "labelhash": "0x50270c4c4cf9837870f71a836cc4ab37d29e0a452eda3caa1b39cc8a29b96e90",
92
                            "name": "safe-foundation.eth",
93
                            "parent": {"name": "eth"},
94
                        },
95
                        "expiryDate": "1763373078",
96
                    },
97
                    {
98
                        "domain": {
99
                            "isMigrated": True,
100
                            "labelName": "safe",
101
                            "labelhash": "0xc318ae71df18dafd8fbd063284586ea242aa3d51bc2950f71d70d7fc205b875f",
102
                            "name": "safe.eth",
103
                            "parent": {"name": "eth"},
104
                        },
105
                        "expiryDate": "1824427603",
106
                    },
107
                    {
108
                        "domain": {
109
                            "isMigrated": True,
110
                            "labelName": "safeboost",
111
                            "labelhash": "0xc5c319f401d68d01378cfa5b109b49ad022d9fc9f6941d1b906553e7affd0968",
112
                            "name": "safeboost.eth",
113
                            "parent": {"name": "eth"},
114
                        },
115
                        "expiryDate": "1763638115",
116
                    },
117
                    {
118
                        "domain": {
119
                            "isMigrated": True,
120
                            "labelName": "safe-token",
121
                            "labelhash": "0xc9ccb8a54110c76c01d4f63e9a9d760d8fd803aba14f4d2fa408200cc6b68cba",
122
                            "name": "safe-token.eth",
123
                            "parent": {"name": "eth"},
124
                        },
125
                        "expiryDate": "1763372390",
126
                    },
127
                    {
128
                        "domain": {
129
                            "isMigrated": True,
130
                            "labelName": "safe-multisig",
131
                            "labelhash": "0xce3f8bfd04bb347a13abbf6faca8dc5e4a281345a316019206742b60b6f1b053",
132
                            "name": "safe-multisig.eth",
133
                            "parent": {"name": "eth"},
134
                        },
135
                        "expiryDate": "1763309068",
136
                    },
137
                    {
138
                        "domain": {
139
                            "isMigrated": True,
140
                            "labelName": "takebackownership",
141
                            "labelhash": "0xedc916efb805eea66b4d5496f670c0166ccd9d2453ded805fe1d82738944e8df",
142
                            "name": "takebackownership.eth",
143
                            "parent": {"name": "eth"},
144
                        },
145
                        "expiryDate": "1764337847",
146
                    },
147
                ]
148
            },
149
        )
150

151
    def test_query_by_domain_hash(self):
3✔
152
        ens_client = EnsClient(config=self.config)
×
153
        if not ens_client.is_available():
×
154
            self.skipTest("ENS Mainnet Client is not available")
×
155

156
        # Query for gnosis domain
157
        domain_hash = keccak(text="gnosis")
×
158
        self.assertEqual("gnosis", ens_client.query_by_domain_hash(domain_hash))
×
159

160
        domain_hash_2 = keccak(
×
161
            text="notverycommon-domain-name-made-up-by-me-with-forbidden-word-ñ"
162
        )
163
        self.assertIsNone(ens_client.query_by_domain_hash(domain_hash_2))
×
164

165
    def test_is_available(self):
3✔
166
        for config in (
×
167
            self.config,
168
            EnsClient.Config(
169
                base_url="https://api.studio.thegraph.com/query/49574/enssepolia/version/latest",
170
            ),
171
            EnsClient.Config(
172
                base_url="https://api.studio.thegraph.com/query/49574/ensholesky/version/latest",
173
            ),
174
        ):
175
            with self.subTest(base_url=config.base_url):
×
176
                ens_client = EnsClient(config=config)
×
177
                self.assertTrue(ens_client.is_available())
×
178
                with mock.patch.object(Session, "post", side_effect=IOError()):
×
179
                    self.assertFalse(ens_client.is_available())
×
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