|
16 | 16 | Rewards, |
17 | 17 | Committees, |
18 | 18 | Attestations, |
| 19 | + PendingDeposits, |
| 20 | + PendingWithdrawals, |
| 21 | + PendingConsolidations, |
19 | 22 | ) |
20 | 23 | from tests import assets |
21 | 24 |
|
@@ -283,6 +286,119 @@ def test_has_block_at_slot_with_block_identifier(self) -> None: |
283 | 286 | b = Beacon(self.beacon_url, self.timeout) |
284 | 287 | self.assertTrue(b.has_block_at_slot(BlockIdentierType.HEAD)) |
285 | 288 |
|
| 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 | + |
286 | 402 |
|
287 | 403 | if __name__ == "__main__": |
288 | 404 | unittest.main() |
0 commit comments