1+ import pytest
2+
13from backend .blockchain .blockchain import Blockchain
24from backend .blockchain .block import GENESIS_DATA
35
@@ -10,4 +12,39 @@ def test_add_block():
1012 data = 'test-data'
1113 blockchain .add_block (data )
1214
13- assert blockchain .chain [- 1 ].data == data
15+ assert blockchain .chain [- 1 ].data == data
16+
17+ @pytest .fixture
18+ def blockchain_three_blocks ():
19+ blockchain = Blockchain ()
20+ for i in range (3 ):
21+ blockchain .add_block (i )
22+ return blockchain
23+
24+ def test_is_valid_chain (blockchain_three_blocks ):
25+ Blockchain .is_valid_chain (blockchain_three_blocks .chain )
26+
27+ def test_is_valid_chain_bad_genesis (blockchain_three_blocks ):
28+ blockchain_three_blocks .chain [0 ].hash = 'evil_hash'
29+
30+ with pytest .raises (Exception , match = 'genesis block must be valid' ):
31+ Blockchain .is_valid_chain (blockchain_three_blocks .chain )
32+
33+ def test_replace_chain (blockchain_three_blocks ):
34+ blockchain = Blockchain ()
35+ blockchain .replace_chain (blockchain_three_blocks .chain )
36+
37+ assert blockchain .chain == blockchain_three_blocks .chain
38+
39+ def test_replace_chain_not_longer (blockchain_three_blocks ):
40+ blockchain = Blockchain ()
41+
42+ with pytest .raises (Exception , match = 'The incoming chain must be longer' ):
43+ blockchain_three_blocks .replace_chain (blockchain .chain )
44+
45+ def test_replace_chain_bad_chain (blockchain_three_blocks ):
46+ blockchain = Blockchain ()
47+ blockchain_three_blocks .chain [1 ].hash = 'evil_hash'
48+
49+ with pytest .raises (Exception , match = 'The incoming chain is invalid' ):
50+ blockchain .replace_chain (blockchain_three_blocks .chain )
0 commit comments