Skip to content

Commit dff8b07

Browse files
committed
fix: add tests for Trezor Zcash API error handling and improve zero balance parsing
1 parent 96b229e commit dff8b07

2 files changed

Lines changed: 63 additions & 1 deletion

File tree

blockapi/test/v2/api/test_trezor_zec.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from blockapi.test.v2.api.conftest import read_file
66
from blockapi.test.v2.test_data import zec_test_address
77
from blockapi.v2.api import TrezorZcashApi
8+
from blockapi.v2.base import ApiException
89
from blockapi.v2.models import FetchResult
910

1011

@@ -38,6 +39,63 @@ def test_parse_only():
3839
assert result.data[0].balance == Decimal('12.345')
3940

4041

42+
def test_parse_zero_balance():
43+
api = TrezorZcashApi()
44+
fetch_result = FetchResult(data=dict(balance='0'))
45+
result = api.parse_balances(fetch_result)
46+
assert result.data is None
47+
48+
49+
def test_fetch_invalid_address(requests_mock):
50+
invalid_address = 'not-a-valid-zec-address'
51+
requests_mock.get(
52+
f'https://blockbook.zec.zelcore.io/api/v2/address/{invalid_address}',
53+
status_code=400,
54+
reason='Bad Request',
55+
)
56+
57+
api = TrezorZcashApi()
58+
result = api.fetch_balances(invalid_address)
59+
assert result.errors == ['Bad Request']
60+
61+
62+
def test_get_balance_invalid_address_should_raise(requests_mock):
63+
invalid_address = 'not-a-valid-zec-address'
64+
requests_mock.get(
65+
f'https://blockbook.zec.zelcore.io/api/v2/address/{invalid_address}',
66+
status_code=400,
67+
reason='Bad Request',
68+
)
69+
70+
api = TrezorZcashApi()
71+
with pytest.raises(ApiException, match='Bad Request'):
72+
api.get_balance(invalid_address)
73+
74+
75+
def test_fetch_error_response(requests_mock):
76+
requests_mock.get(
77+
f'https://blockbook.zec.zelcore.io/api/v2/address/{zec_test_address}',
78+
status_code=500,
79+
reason='Internal Server Error',
80+
)
81+
82+
api = TrezorZcashApi()
83+
result = api.fetch_balances(zec_test_address)
84+
assert result.errors == ['Internal Server Error']
85+
86+
87+
def test_get_balance_should_raise(requests_mock):
88+
requests_mock.get(
89+
f'https://blockbook.zec.zelcore.io/api/v2/address/{zec_test_address}',
90+
status_code=500,
91+
reason='Internal Server Error',
92+
)
93+
94+
api = TrezorZcashApi()
95+
with pytest.raises(ApiException, match='Internal Server Error'):
96+
api.get_balance(zec_test_address)
97+
98+
4199
@pytest.fixture
42100
def trezor_zec_balance_response():
43101
return read_file('data/trezor_zec_balance_response.json')

blockapi/v2/api/trezor.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,13 @@ def parse_balances(self, fetch_result: FetchResult) -> ParseResult:
4545
if not fetch_result.data:
4646
return ParseResult()
4747

48+
balance_raw = fetch_result.data.get('balance')
49+
if not balance_raw or balance_raw == '0':
50+
return ParseResult()
51+
4852
balances = [
4953
BalanceItem.from_api(
50-
balance_raw=fetch_result.data.get('balance'),
54+
balance_raw=balance_raw,
5155
coin=self.coin,
5256
asset_type=AssetType.AVAILABLE,
5357
raw=fetch_result.data,

0 commit comments

Comments
 (0)