Skip to content

Commit d611d77

Browse files
committed
feat: add unit tests for new beacon calls
1 parent 0971e53 commit d611d77

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

tests/test_beacon.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
Rewards,
1717
Committees,
1818
Attestations,
19+
PendingDeposits,
20+
PendingWithdrawals,
21+
PendingConsolidations,
1922
)
2023
from tests import assets
2124

@@ -283,6 +286,119 @@ def test_has_block_at_slot_with_block_identifier(self) -> None:
283286
b = Beacon(self.beacon_url, self.timeout)
284287
self.assertTrue(b.has_block_at_slot(BlockIdentierType.HEAD))
285288

289+
def test_get_pending_deposits(self) -> None:
290+
"""Test get_pending_deposits() returns pending deposit data."""
291+
deposits_data = {
292+
"data": [
293+
{
294+
"pubkey": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
295+
"withdrawal_credentials": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
296+
"amount": 32000000000,
297+
"slot": 4996400
298+
},
299+
{
300+
"pubkey": "0x2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef",
301+
"withdrawal_credentials": "0xbcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890a",
302+
"amount": 32000000000,
303+
"slot": 4996500
304+
}
305+
]
306+
}
307+
with Mocker() as m:
308+
m.get(f"{self.beacon_url}/eth/v1/beacon/states/head/pending_deposits", json=deposits_data)
309+
b = Beacon(self.beacon_url, self.timeout)
310+
result = b.get_pending_deposits()
311+
self.assertIsInstance(result, PendingDeposits)
312+
self.assertEqual(len(result.data), 2)
313+
self.assertEqual(result.data[0].pubkey, "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
314+
self.assertEqual(result.data[0].withdrawal_credentials, "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890")
315+
self.assertEqual(result.data[0].amount, 32000000000)
316+
self.assertEqual(result.data[0].slot, 4996400)
317+
self.assertEqual(result.data[1].pubkey, "0x2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef2345678901abcdef")
318+
self.assertEqual(result.data[1].withdrawal_credentials, "0xbcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890a")
319+
self.assertEqual(result.data[1].amount, 32000000000)
320+
self.assertEqual(result.data[1].slot, 4996500)
321+
322+
def test_get_pending_withdrawals(self) -> None:
323+
"""Test get_pending_withdrawals() returns pending withdrawal data."""
324+
withdrawals_data = {
325+
"data": [
326+
{
327+
"validator_index": 42,
328+
"amount": 1000000000
329+
},
330+
{
331+
"validator_index": 43,
332+
"amount": 2000000000
333+
}
334+
]
335+
}
336+
with Mocker() as m:
337+
m.get(f"{self.beacon_url}/eth/v1/beacon/states/head/pending_partial_withdrawals", json=withdrawals_data)
338+
b = Beacon(self.beacon_url, self.timeout)
339+
result = b.get_pending_withdrawals()
340+
self.assertIsInstance(result, PendingWithdrawals)
341+
self.assertEqual(len(result.data), 2)
342+
self.assertEqual(result.data[0].validator_index, 42)
343+
self.assertEqual(result.data[0].amount, 1000000000)
344+
self.assertEqual(result.data[1].validator_index, 43)
345+
self.assertEqual(result.data[1].amount, 2000000000)
346+
347+
def test_get_pending_consolidations(self) -> None:
348+
"""Test get_pending_consolidations() returns pending consolidation data."""
349+
consolidations_data = {
350+
"data": [
351+
{
352+
"source_index": 100,
353+
"target_index": 200
354+
},
355+
{
356+
"source_index": 101,
357+
"target_index": 201
358+
}
359+
]
360+
}
361+
with Mocker() as m:
362+
m.get(f"{self.beacon_url}/eth/v1/beacon/states/head/pending_consolidations", json=consolidations_data)
363+
b = Beacon(self.beacon_url, self.timeout)
364+
result = b.get_pending_consolidations()
365+
self.assertIsInstance(result, PendingConsolidations)
366+
self.assertEqual(len(result.data), 2)
367+
self.assertEqual(result.data[0].source_index, 100)
368+
self.assertEqual(result.data[0].target_index, 200)
369+
self.assertEqual(result.data[1].source_index, 101)
370+
self.assertEqual(result.data[1].target_index, 201)
371+
372+
def test_get_pending_deposits_empty(self) -> None:
373+
"""Test get_pending_deposits() returns empty data when no pending deposits."""
374+
empty_data = {"data": []}
375+
with Mocker() as m:
376+
m.get(f"{self.beacon_url}/eth/v1/beacon/states/head/pending_deposits", json=empty_data)
377+
b = Beacon(self.beacon_url, self.timeout)
378+
result = b.get_pending_deposits()
379+
self.assertIsInstance(result, PendingDeposits)
380+
self.assertEqual(len(result.data), 0)
381+
382+
def test_get_pending_withdrawals_empty(self) -> None:
383+
"""Test get_pending_withdrawals() returns empty data when no pending withdrawals."""
384+
empty_data = {"data": []}
385+
with Mocker() as m:
386+
m.get(f"{self.beacon_url}/eth/v1/beacon/states/head/pending_partial_withdrawals", json=empty_data)
387+
b = Beacon(self.beacon_url, self.timeout)
388+
result = b.get_pending_withdrawals()
389+
self.assertIsInstance(result, PendingWithdrawals)
390+
self.assertEqual(len(result.data), 0)
391+
392+
def test_get_pending_consolidations_empty(self) -> None:
393+
"""Test get_pending_consolidations() returns empty data when no pending consolidations."""
394+
empty_data = {"data": []}
395+
with Mocker() as m:
396+
m.get(f"{self.beacon_url}/eth/v1/beacon/states/head/pending_consolidations", json=empty_data)
397+
b = Beacon(self.beacon_url, self.timeout)
398+
result = b.get_pending_consolidations()
399+
self.assertIsInstance(result, PendingConsolidations)
400+
self.assertEqual(len(result.data), 0)
401+
286402

287403
if __name__ == "__main__":
288404
unittest.main()

0 commit comments

Comments
 (0)