chia-blockchain/tests/cmds/testing_classes.py
Jack Nelson ed4c5217cc
Add Click CLI Unit Tests (Proof of Concept) (#15746)
* testing utils v1

* testing utils v2

* tests for chia show

* oopsies

* fix chia root not working & rename class

* change to generated full block instead of pre-generated mess

* fix capsys, BASE_LIST and add more comments

* ignore mypy ...
2023-07-25 21:42:52 -05:00

60 lines
1.8 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from typing import Optional
from chia.types.blockchain_format.sized_bytes import bytes32
from chia.util.ints import uint8, uint32, uint64
# This is a modified version of the TestBlockRecord from test_mempool_manager.py
@dataclass(frozen=True)
class TestBlockRecord:
"""
This is a subset of BlockRecord that the cli tests need
"""
header_hash: bytes32
height: uint32
timestamp: Optional[uint64]
prev_transaction_block_height: uint32
prev_transaction_block_hash: Optional[bytes32]
prev_hash: Optional[bytes32]
weight: uint64 = uint64(10000)
fees: uint64 = uint64(5000)
farmer_puzzle_hash: bytes32 = bytes32([1] * 32)
pool_puzzle_hash: bytes32 = bytes32([2] * 32)
sub_slot_iters: uint64 = uint64(1024)
total_iters: uint64 = uint64(12081)
deficit: uint8 = uint8(0)
@property
def is_transaction_block(self) -> bool:
return self.timestamp is not None
def height_hash(height: int) -> bytes32:
return bytes32(height.to_bytes(32, byteorder="big"))
def hash_to_height(int_bytes: bytes32) -> int:
return int.from_bytes(int_bytes, byteorder="big")
def create_test_block_record(
*, height: uint32 = uint32(11), timestamp: uint64 = uint64(10040), header_hash: Optional[bytes32] = None
) -> TestBlockRecord:
if header_hash is None:
header_hash = height_hash(height)
else:
height = uint32(hash_to_height(header_hash)) # so the heights make sense
return TestBlockRecord(
header_hash=header_hash,
height=height,
timestamp=timestamp,
prev_transaction_block_height=uint32(height - 1),
prev_transaction_block_hash=height_hash(height - 1),
prev_hash=height_hash(height - 1),
)