11import importlib
2- import logging
2+ import os
33import pytest
44
5- from web3 .auto import (
6- infura ,
5+ from eth_utils import (
6+ ValidationError ,
7+ )
8+
9+ from web3 .exceptions import (
10+ InfuraKeyNotFound ,
711)
812from web3 .providers import (
913 HTTPProvider ,
1418 load_provider_from_environment ,
1519)
1620
21+ # Ugly hack to import infura now that API KEY is required
22+ os .environ ['WEB3_INFURA_API_KEY' ] = 'test'
23+ from web3 .auto import ( # noqa E402 isort:skip
24+ infura ,
25+ )
26+
27+
28+ @pytest .fixture (autouse = True )
29+ def delete_infura_key (monkeypatch ):
30+ monkeypatch .delenv ('INFURA_API_KEY' , raising = False )
31+ monkeypatch .delenv ('WEB3_INFURA_API_KEY' , raising = False )
32+
1733
1834@pytest .mark .parametrize (
1935 'uri, expected_type, expected_attrs' ,
@@ -38,75 +54,49 @@ def test_web3_auto_infura_empty_key(monkeypatch, caplog, environ_name):
3854 monkeypatch .setenv ('WEB3_INFURA_SCHEME' , 'https' )
3955 monkeypatch .setenv (environ_name , '' )
4056
41- importlib .reload (infura )
42- assert len (caplog .record_tuples ) == 1
43- logger , level , msg = caplog .record_tuples [0 ]
44- assert 'WEB3_INFURA_PROJECT_ID' in msg
45- assert level == logging .WARNING
46-
47- w3 = infura .w3
48- assert isinstance (w3 .provider , HTTPProvider )
49- assert getattr (w3 .provider , 'endpoint_uri' ) == 'https://mainnet.infura.io/'
57+ with pytest .raises (InfuraKeyNotFound ):
58+ importlib .reload (infura )
5059
5160
5261@pytest .mark .parametrize ('environ_name' , ['WEB3_INFURA_API_KEY' , 'WEB3_INFURA_PROJECT_ID' ])
5362def test_web3_auto_infura_deleted_key (monkeypatch , caplog , environ_name ):
5463 monkeypatch .setenv ('WEB3_INFURA_SCHEME' , 'https' )
64+
5565 monkeypatch .delenv (environ_name , raising = False )
5666
57- importlib .reload (infura )
58- assert len (caplog .record_tuples ) == 1
59- logger , level , msg = caplog .record_tuples [0 ]
60- assert 'WEB3_INFURA_PROJECT_ID' in msg
61- assert level == logging .WARNING
62-
63- w3 = infura .w3
64- assert isinstance (w3 .provider , HTTPProvider )
65- assert getattr (w3 .provider , 'endpoint_uri' ) == 'https://mainnet.infura.io/'
67+ with pytest .raises (InfuraKeyNotFound ):
68+ importlib .reload (infura )
6669
6770
6871@pytest .mark .parametrize ('environ_name' , ['WEB3_INFURA_API_KEY' , 'WEB3_INFURA_PROJECT_ID' ])
6972def test_web3_auto_infura_websocket_empty_key (monkeypatch , caplog , environ_name ):
7073 monkeypatch .setenv (environ_name , '' )
7174
72- importlib .reload (infura )
73- assert len (caplog .record_tuples ) == 1
74- logger , level , msg = caplog .record_tuples [0 ]
75- assert 'WEB3_INFURA_PROJECT_ID' in msg
76- assert level == logging .WARNING
77-
78- w3 = infura .w3
79- assert isinstance (w3 .provider , WebsocketProvider )
80- assert getattr (w3 .provider , 'endpoint_uri' ) == 'wss://mainnet.infura.io/ws/'
75+ with pytest .raises (InfuraKeyNotFound ):
76+ importlib .reload (infura )
8177
8278
8379@pytest .mark .parametrize ('environ_name' , ['WEB3_INFURA_API_KEY' , 'WEB3_INFURA_PROJECT_ID' ])
8480def test_web3_auto_infura_websocket_deleted_key (monkeypatch , caplog , environ_name ):
8581 monkeypatch .delenv (environ_name , raising = False )
8682
87- importlib .reload (infura )
88- assert len (caplog .record_tuples ) == 1
89- logger , level , msg = caplog .record_tuples [0 ]
90- assert 'WEB3_INFURA_PROJECT_ID' in msg
91- assert level == logging .WARNING
92-
93- w3 = infura .w3
94- assert isinstance (w3 .provider , WebsocketProvider )
95- assert getattr (w3 .provider , 'endpoint_uri' ) == 'wss://mainnet.infura.io/ws/'
83+ with pytest .raises (InfuraKeyNotFound ):
84+ importlib .reload (infura )
9685
9786
9887@pytest .mark .parametrize ('environ_name' , ['WEB3_INFURA_API_KEY' , 'WEB3_INFURA_PROJECT_ID' ])
9988def test_web3_auto_infura (monkeypatch , caplog , environ_name ):
10089 monkeypatch .setenv ('WEB3_INFURA_SCHEME' , 'https' )
10190 API_KEY = 'aoeuhtns'
91+
10292 monkeypatch .setenv (environ_name , API_KEY )
103- expected_url = 'https://%s/v3/%s' % (infura .INFURA_MAINNET_DOMAIN , API_KEY )
10493
10594 importlib .reload (infura )
10695 assert len (caplog .record_tuples ) == 0
10796
10897 w3 = infura .w3
10998 assert isinstance (w3 .provider , HTTPProvider )
99+ expected_url = 'https://%s/v3/%s' % (infura .INFURA_MAINNET_DOMAIN , API_KEY )
110100 assert getattr (w3 .provider , 'endpoint_uri' ) == expected_url
111101
112102
@@ -123,3 +113,12 @@ def test_web3_auto_infura_websocket_default(monkeypatch, caplog, environ_name):
123113 w3 = infura .w3
124114 assert isinstance (w3 .provider , WebsocketProvider )
125115 assert getattr (w3 .provider , 'endpoint_uri' ) == expected_url
116+
117+
118+ def test_web3_auto_infura_raises_error_with_nonexistent_scheme (monkeypatch ):
119+ monkeypatch .setenv ('WEB3_INFURA_API_KEY' , 'test' )
120+ monkeypatch .setenv ('WEB3_INFURA_SCHEME' , 'not-a-scheme' )
121+
122+ error_msg = "Cannot connect to Infura with scheme 'not-a-scheme'"
123+ with pytest .raises (ValidationError , match = error_msg ):
124+ importlib .reload (infura )
0 commit comments