Skip to content

Commit bc3d43b

Browse files
Merge pull request #2705 from opentensor/tests/zyzniewski/proper_mock
Properly mock data_chain class methods
2 parents 02ea729 + 3e8ffff commit bc3d43b

File tree

2 files changed

+95
-49
lines changed

2 files changed

+95
-49
lines changed

tests/unit_tests/test_async_subtensor.py

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,10 @@ async def test_get_delegates(subtensor, mocker, fake_result, response):
391391
autospec=subtensor.query_runtime_api, return_value=fake_result
392392
)
393393
subtensor.query_runtime_api = mocked_query_runtime_api
394-
mocked_delegate_info_list_from_dicts = mocker.Mock()
395-
async_subtensor.DelegateInfo.list_from_dicts = mocked_delegate_info_list_from_dicts
394+
mocked_delegate_info_list_from_dicts = mocker.patch.object(
395+
async_subtensor.DelegateInfo,
396+
"list_from_dicts",
397+
)
396398

397399
# Call
398400
result = await subtensor.get_delegates(block_hash=None, reuse_block=False)
@@ -434,7 +436,11 @@ async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, respon
434436
mocked_stake_info_list_from_dicts = mocker.Mock(
435437
return_value=[mock_stake_info] if fake_result else []
436438
)
437-
async_subtensor.StakeInfo.list_from_dicts = mocked_stake_info_list_from_dicts
439+
mocker.patch.object(
440+
async_subtensor.StakeInfo,
441+
"list_from_dicts",
442+
mocked_stake_info_list_from_dicts,
443+
)
438444

439445
# Call
440446
result = await subtensor.get_stake_info_for_coldkey(
@@ -976,9 +982,8 @@ async def test_neurons_lite(subtensor, mocker, fake_result, response):
976982
mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result)
977983
subtensor.query_runtime_api = mocked_query_runtime_api
978984

979-
mocked_neuron_info_lite_list_from_dicts = mocker.Mock()
980-
async_subtensor.NeuronInfoLite.list_from_dicts = (
981-
mocked_neuron_info_lite_list_from_dicts
985+
mocked_neuron_info_lite_list_from_dicts = mocker.patch.object(
986+
async_subtensor.NeuronInfoLite, "list_from_dicts"
982987
)
983988

984989
# Call
@@ -1140,11 +1145,14 @@ async def test_neuron_for_uid_happy_path(subtensor, mocker):
11401145
fake_netuid = 2
11411146
fake_block_hash = "block_hash"
11421147

1143-
mocked_null_neuron = mocker.Mock()
1144-
async_subtensor.NeuronInfo.get_null_neuron = mocked_null_neuron
1145-
1146-
mocked_neuron_info_from_dict = mocker.Mock()
1147-
async_subtensor.NeuronInfo.from_dict = mocked_neuron_info_from_dict
1148+
mocked_null_neuron = mocker.patch.object(
1149+
async_subtensor.NeuronInfo,
1150+
"get_null_neuron",
1151+
)
1152+
mocked_neuron_info_from_dict = mocker.patch.object(
1153+
async_subtensor.NeuronInfo,
1154+
"from_dict",
1155+
)
11481156

11491157
# Call
11501158
result = await subtensor.neuron_for_uid(
@@ -1167,8 +1175,10 @@ async def test_neuron_for_uid_with_none_uid(subtensor, mocker):
11671175
fake_netuid = 1
11681176
fake_block_hash = "block_hash"
11691177

1170-
mocked_null_neuron = mocker.Mock()
1171-
async_subtensor.NeuronInfo.get_null_neuron = mocked_null_neuron
1178+
mocked_null_neuron = mocker.patch.object(
1179+
async_subtensor.NeuronInfo,
1180+
"get_null_neuron",
1181+
)
11721182

11731183
# Call
11741184
result = await subtensor.neuron_for_uid(
@@ -1188,8 +1198,10 @@ async def test_neuron_for_uid(subtensor, mocker):
11881198
fake_netuid = 2
11891199
fake_block_hash = "block_hash"
11901200

1191-
mocked_null_neuron = mocker.Mock()
1192-
async_subtensor.NeuronInfo.get_null_neuron = mocked_null_neuron
1201+
mocked_null_neuron = mocker.patch.object(
1202+
async_subtensor.NeuronInfo,
1203+
"get_null_neuron",
1204+
)
11931205

11941206
# no result in response
11951207
mocked_substrate_runtime_call = mocker.AsyncMock(
@@ -1199,8 +1211,10 @@ async def test_neuron_for_uid(subtensor, mocker):
11991211
)
12001212
subtensor.substrate.runtime_call = mocked_substrate_runtime_call
12011213

1202-
mocked_neuron_info_from_dict = mocker.Mock()
1203-
async_subtensor.NeuronInfo.from_dict = mocked_neuron_info_from_dict
1214+
mocked_neuron_info_from_dict = mocker.patch.object(
1215+
async_subtensor.NeuronInfo,
1216+
"from_dict",
1217+
)
12041218

12051219
# Call
12061220
result = await subtensor.neuron_for_uid(
@@ -2175,8 +2189,11 @@ async def test_weights_rate_limit_success(subtensor, mocker):
21752189
fake_netuid = 1
21762190
fake_rate_limit = 10
21772191

2178-
mocked_get_hyperparameter = mocker.AsyncMock(return_value=fake_rate_limit)
2179-
subtensor.get_hyperparameter = mocked_get_hyperparameter
2192+
mocked_get_hyperparameter = mocker.patch.object(
2193+
subtensor,
2194+
"get_hyperparameter",
2195+
return_value=fake_rate_limit,
2196+
)
21802197

21812198
# Call
21822199
result = await subtensor.weights_rate_limit(netuid=fake_netuid)
@@ -2198,8 +2215,11 @@ async def test_weights_rate_limit_none(subtensor, mocker):
21982215
fake_netuid = 1
21992216
fake_result = None
22002217

2201-
mocked_get_hyperparameter = mocker.AsyncMock(return_value=fake_result)
2202-
subtensor.get_hyperparameter = mocked_get_hyperparameter
2218+
mocked_get_hyperparameter = mocker.patch.object(
2219+
subtensor,
2220+
"get_hyperparameter",
2221+
return_value=fake_result,
2222+
)
22032223

22042224
# Call
22052225
result = await subtensor.weights_rate_limit(netuid=fake_netuid)
@@ -2224,10 +2244,11 @@ async def test_blocks_since_last_update_success(subtensor, mocker):
22242244
current_block = 100
22252245
fake_blocks_since_update = current_block - last_update_block
22262246

2227-
mocked_get_hyperparameter = mocker.AsyncMock(
2228-
return_value={fake_uid: last_update_block}
2247+
mocked_get_hyperparameter = mocker.patch.object(
2248+
subtensor,
2249+
"get_hyperparameter",
2250+
return_value={fake_uid: last_update_block},
22292251
)
2230-
subtensor.get_hyperparameter = mocked_get_hyperparameter
22312252

22322253
mocked_get_current_block = mocker.AsyncMock(return_value=current_block)
22332254
subtensor.get_current_block = mocked_get_current_block
@@ -2251,8 +2272,11 @@ async def test_blocks_since_last_update_no_last_update(subtensor, mocker):
22512272
fake_uid = 5
22522273
fake_result = None
22532274

2254-
mocked_get_hyperparameter = mocker.AsyncMock(return_value=fake_result)
2255-
subtensor.get_hyperparameter = mocked_get_hyperparameter
2275+
mocked_get_hyperparameter = mocker.patch.object(
2276+
subtensor,
2277+
"get_hyperparameter",
2278+
return_value=fake_result,
2279+
)
22562280

22572281
# Call
22582282
result = await subtensor.blocks_since_last_update(netuid=fake_netuid, uid=fake_uid)

tests/unit_tests/test_subtensor.py

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -369,17 +369,23 @@ def test_blocks_since_last_update_success_calls(subtensor, mocker):
369369
uid = 7
370370
mocked_current_block = 2
371371
mocked_result = {uid: 1}
372-
subtensor.get_hyperparameter = mocker.MagicMock(return_value=mocked_result)
373-
subtensor.get_current_block = mocker.MagicMock(return_value=mocked_current_block)
372+
mocked_get_hyperparameter = mocker.patch.object(
373+
subtensor,
374+
"get_hyperparameter",
375+
return_value=mocked_result,
376+
)
377+
mocked_get_current_block = mocker.patch.object(
378+
subtensor,
379+
"get_current_block",
380+
return_value=mocked_current_block,
381+
)
374382

375383
# Call
376384
result = subtensor.blocks_since_last_update(netuid=7, uid=uid)
377385

378386
# Assertions
379-
subtensor.get_current_block.assert_called_once()
380-
subtensor.get_hyperparameter.assert_called_once_with(
381-
param_name="LastUpdate", netuid=7
382-
)
387+
mocked_get_current_block.assert_called_once()
388+
mocked_get_hyperparameter.assert_called_once_with(param_name="LastUpdate", netuid=7)
383389
assert result == 1
384390
# if we change the methods logic in the future we have to be make sure the returned type is correct
385391
assert isinstance(result, int)
@@ -388,13 +394,17 @@ def test_blocks_since_last_update_success_calls(subtensor, mocker):
388394
def test_weights_rate_limit_success_calls(subtensor, mocker):
389395
"""Tests the weights_rate_limit method to ensure it correctly fetches the WeightsSetRateLimit hyperparameter."""
390396
# Prep
391-
subtensor.get_hyperparameter = mocker.MagicMock(return_value=5)
397+
mocked_get_hyperparameter = mocker.patch.object(
398+
subtensor,
399+
"get_hyperparameter",
400+
return_value=5,
401+
)
392402

393403
# Call
394404
result = subtensor.weights_rate_limit(netuid=7)
395405

396406
# Assertions
397-
subtensor.get_hyperparameter.assert_called_once_with(
407+
mocked_get_hyperparameter.assert_called_once_with(
398408
param_name="WeightsSetRateLimit",
399409
netuid=7,
400410
block=None,
@@ -1287,9 +1297,11 @@ def test_subnetwork_n(subtensor, mocker):
12871297
fake_block = 123
12881298
fake_result = 2
12891299

1290-
mocked_get_hyperparameter = mocker.MagicMock()
1291-
mocked_get_hyperparameter.return_value = fake_result
1292-
subtensor.get_hyperparameter = mocked_get_hyperparameter
1300+
mocked_get_hyperparameter = mocker.patch.object(
1301+
subtensor,
1302+
"get_hyperparameter",
1303+
return_value=fake_result,
1304+
)
12931305

12941306
# Call
12951307
result = subtensor.subnetwork_n(fake_netuid, fake_block)
@@ -1591,11 +1603,13 @@ def test_immunity_period(subtensor, mocker):
15911603
# Preps
15921604
fake_netuid = 1
15931605
fake_block = 123
1594-
fare_result = 101
1606+
fake_result = 101
15951607

1596-
mocked_get_hyperparameter = mocker.MagicMock()
1597-
mocked_get_hyperparameter.return_value = fare_result
1598-
subtensor.get_hyperparameter = mocked_get_hyperparameter
1608+
mocked_get_hyperparameter = mocker.patch.object(
1609+
subtensor,
1610+
"get_hyperparameter",
1611+
return_value=fake_result,
1612+
)
15991613

16001614
# Call
16011615
result = subtensor.immunity_period(netuid=fake_netuid, block=fake_block)
@@ -1640,11 +1654,13 @@ def test_tempo(subtensor, mocker):
16401654
# Preps
16411655
fake_netuid = 1
16421656
fake_block = 123
1643-
fare_result = 101
1657+
fake_result = 101
16441658

1645-
mocked_get_hyperparameter = mocker.MagicMock()
1646-
mocked_get_hyperparameter.return_value = fare_result
1647-
subtensor.get_hyperparameter = mocked_get_hyperparameter
1659+
mocked_get_hyperparameter = mocker.patch.object(
1660+
subtensor,
1661+
"get_hyperparameter",
1662+
return_value=fake_result,
1663+
)
16481664

16491665
# Call
16501666
result = subtensor.tempo(netuid=fake_netuid, block=fake_block)
@@ -1825,8 +1841,11 @@ def test_min_allowed_weights(subtensor, mocker):
18251841
fake_block = 123
18261842
return_value = 10
18271843

1828-
mocked_get_hyperparameter = mocker.MagicMock(return_value=return_value)
1829-
subtensor.get_hyperparameter = mocked_get_hyperparameter
1844+
mocked_get_hyperparameter = mocker.patch.object(
1845+
subtensor,
1846+
"get_hyperparameter",
1847+
return_value=return_value,
1848+
)
18301849

18311850
# Call
18321851
result = subtensor.min_allowed_weights(netuid=fake_netuid, block=fake_block)
@@ -1844,8 +1863,11 @@ def test_max_weight_limit(subtensor, mocker):
18441863
fake_block = 123
18451864
return_value = 100
18461865

1847-
mocked_get_hyperparameter = mocker.MagicMock(return_value=return_value)
1848-
subtensor.get_hyperparameter = mocked_get_hyperparameter
1866+
mocked_get_hyperparameter = mocker.patch.object(
1867+
subtensor,
1868+
"get_hyperparameter",
1869+
return_value=return_value,
1870+
)
18491871

18501872
mocked_u16_normalized_float = mocker.patch.object(
18511873
subtensor_module,

0 commit comments

Comments
 (0)