Skip to content

Commit d10b688

Browse files
author
Roman
committed
update bittensor/core/extrinsics/transfer.py unit tests
1 parent efc47f4 commit d10b688

File tree

1 file changed

+39
-134
lines changed

1 file changed

+39
-134
lines changed
Lines changed: 39 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,47 @@
1-
import pytest
1+
from bittensor.core.extrinsics import transfer
22

3-
from bittensor.core import subtensor as subtensor_module
4-
from bittensor.core.extrinsics.transfer import do_transfer
5-
from bittensor.core.subtensor import Subtensor
6-
from bittensor.utils.balance import Balance
73

4+
def test_transfer_extrinsic(mocker):
5+
"""Verify that sync `transfer_extrinsic` method calls proper async method."""
6+
# Preps
7+
fake_subtensor = mocker.Mock()
8+
fake_wallet = mocker.Mock()
9+
dest = "hotkey"
10+
amount = 1.1
11+
transfer_all = True
12+
wait_for_inclusion = True
13+
wait_for_finalization = True
14+
keep_alive = False
815

9-
@pytest.fixture
10-
def subtensor(mocker):
11-
fake_substrate = mocker.MagicMock()
12-
fake_substrate.websocket.sock.getsockopt.return_value = 0
13-
mocker.patch.object(
14-
subtensor_module, "SubstrateInterface", return_value=fake_substrate
15-
)
16-
return Subtensor()
17-
18-
19-
def test_do_transfer_is_success_true(subtensor, mocker):
20-
"""Successful do_transfer call."""
21-
# Prep
22-
fake_wallet = mocker.MagicMock()
23-
fake_dest = "SS58PUBLICKEY"
24-
fake_transfer_balance = Balance(1)
25-
fake_wait_for_inclusion = True
26-
fake_wait_for_finalization = True
27-
28-
subtensor.substrate.submit_extrinsic.return_value.is_success = True
29-
30-
# Call
31-
result = do_transfer(
32-
subtensor,
33-
fake_wallet,
34-
fake_dest,
35-
fake_transfer_balance,
36-
fake_wait_for_inclusion,
37-
fake_wait_for_finalization,
38-
)
39-
40-
# Asserts
41-
subtensor.substrate.compose_call.assert_called_once_with(
42-
call_module="Balances",
43-
call_function="transfer_allow_death",
44-
call_params={"dest": fake_dest, "value": fake_transfer_balance.rao},
45-
)
46-
subtensor.substrate.create_signed_extrinsic.assert_called_once_with(
47-
call=subtensor.substrate.compose_call.return_value, keypair=fake_wallet.coldkey
48-
)
49-
subtensor.substrate.submit_extrinsic.assert_called_once_with(
50-
subtensor.substrate.create_signed_extrinsic.return_value,
51-
wait_for_inclusion=fake_wait_for_inclusion,
52-
wait_for_finalization=fake_wait_for_finalization,
53-
)
54-
subtensor.substrate.submit_extrinsic.return_value.process_events.assert_called_once()
55-
assert result == (
56-
True,
57-
subtensor.substrate.submit_extrinsic.return_value.block_hash,
58-
None,
59-
)
60-
61-
62-
def test_do_transfer_is_success_false(subtensor, mocker):
63-
"""Successful do_transfer call."""
64-
# Prep
65-
fake_wallet = mocker.MagicMock()
66-
fake_dest = "SS58PUBLICKEY"
67-
fake_transfer_balance = Balance(1)
68-
fake_wait_for_inclusion = True
69-
fake_wait_for_finalization = True
70-
71-
subtensor.substrate.submit_extrinsic.return_value.is_success = False
72-
73-
mocked_format_error_message = mocker.MagicMock()
74-
subtensor_module.format_error_message = mocked_format_error_message
75-
76-
# Call
77-
result = do_transfer(
78-
subtensor,
79-
fake_wallet,
80-
fake_dest,
81-
fake_transfer_balance,
82-
fake_wait_for_inclusion,
83-
fake_wait_for_finalization,
84-
)
85-
86-
# Asserts
87-
subtensor.substrate.compose_call.assert_called_once_with(
88-
call_module="Balances",
89-
call_function="transfer_allow_death",
90-
call_params={"dest": fake_dest, "value": fake_transfer_balance.rao},
91-
)
92-
subtensor.substrate.create_signed_extrinsic.assert_called_once_with(
93-
call=subtensor.substrate.compose_call.return_value, keypair=fake_wallet.coldkey
94-
)
95-
subtensor.substrate.submit_extrinsic.assert_called_once_with(
96-
subtensor.substrate.create_signed_extrinsic.return_value,
97-
wait_for_inclusion=fake_wait_for_inclusion,
98-
wait_for_finalization=fake_wait_for_finalization,
99-
)
100-
subtensor.substrate.submit_extrinsic.return_value.process_events.assert_called_once()
101-
102-
assert result == (
103-
False,
104-
None,
105-
subtensor.substrate.submit_extrinsic.return_value.error_message,
106-
)
107-
108-
109-
def test_do_transfer_no_waits(subtensor, mocker):
110-
"""Successful do_transfer call."""
111-
# Prep
112-
fake_wallet = mocker.MagicMock()
113-
fake_dest = "SS58PUBLICKEY"
114-
fake_transfer_balance = Balance(1)
115-
fake_wait_for_inclusion = False
116-
fake_wait_for_finalization = False
16+
mocked_execute_coroutine = mocker.patch.object(transfer, "execute_coroutine")
17+
mocked_transfer_extrinsic = mocker.Mock()
18+
transfer.async_transfer_extrinsic = mocked_transfer_extrinsic
11719

11820
# Call
119-
result = do_transfer(
120-
subtensor,
121-
fake_wallet,
122-
fake_dest,
123-
fake_transfer_balance,
124-
fake_wait_for_inclusion,
125-
fake_wait_for_finalization,
21+
result = transfer.transfer_extrinsic(
22+
subtensor=fake_subtensor,
23+
wallet=fake_wallet,
24+
dest=dest,
25+
amount=amount,
26+
transfer_all=transfer_all,
27+
wait_for_inclusion=wait_for_inclusion,
28+
wait_for_finalization=wait_for_finalization,
29+
keep_alive=keep_alive,
12630
)
12731

12832
# Asserts
129-
subtensor.substrate.compose_call.assert_called_once_with(
130-
call_module="Balances",
131-
call_function="transfer_allow_death",
132-
call_params={"dest": fake_dest, "value": fake_transfer_balance.rao},
133-
)
134-
subtensor.substrate.create_signed_extrinsic.assert_called_once_with(
135-
call=subtensor.substrate.compose_call.return_value, keypair=fake_wallet.coldkey
136-
)
137-
subtensor.substrate.submit_extrinsic.assert_called_once_with(
138-
subtensor.substrate.create_signed_extrinsic.return_value,
139-
wait_for_inclusion=fake_wait_for_inclusion,
140-
wait_for_finalization=fake_wait_for_finalization,
141-
)
142-
assert result == (True, None, None)
33+
mocked_execute_coroutine.assert_called_once_with(
34+
coroutine=mocked_transfer_extrinsic.return_value,
35+
event_loop=fake_subtensor.event_loop,
36+
)
37+
mocked_transfer_extrinsic.assert_called_once_with(
38+
subtensor=fake_subtensor.async_subtensor,
39+
wallet=fake_wallet,
40+
destination=dest,
41+
amount=amount,
42+
transfer_all=transfer_all,
43+
wait_for_inclusion=wait_for_inclusion,
44+
wait_for_finalization=wait_for_finalization,
45+
keep_alive=keep_alive,
46+
)
47+
assert result == mocked_execute_coroutine.return_value

0 commit comments

Comments
 (0)