def test_hex_format(self):
        blockchain_ref = make_blockchain()
        outfile = BytesIO()
        blockchain_ref.save_to_file(outfile)
        outfile.seek(0)

        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.from_file(outfile)

        assert blockchain == blockchain_ref
    def test_basic_ok(self):

        # Arrange
        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.new_block()

        # Act
        random_sign(blockchain.last_block())

        # Assert
        assert blockchain[0].is_signed() is True
    def test_hex_format(self):

        # Arrange
        blockchain_ref = make_blockchain()
        b = blockchain_ref.pack()

        # Act
        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.from_bytes(b)

        # Assert
        assert blockchain == blockchain_ref
    def test_return_part_of_blockchain_at_second_contact(self):

        # Arrange
        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.new_block()
        tx0 = Transaction(VERSION, Transaction.GUZI_CREATE, KEY_POOL[0]["pub"],
                          0)
        tx1 = Transaction(VERSION, Transaction.GUZI_CREATE, KEY_POOL[1]["pub"],
                          0)
        tx2 = Transaction(VERSION, Transaction.GUZI_CREATE, KEY_POOL[2]["pub"],
                          0)
        tx3 = Transaction(VERSION, Transaction.GUZI_CREATE, KEY_POOL[3]["pub"],
                          0)
        tx4 = Transaction(VERSION, Transaction.GUZI_CREATE, KEY_POOL[4]["pub"],
                          0)
        blockchain[0].add_transactions([tx0, tx1, tx2])
        random_sign(blockchain.last_block())
        blockchain.new_block()
        blockchain[0].add_transactions([tx3, tx4])

        # Act
        result = blockchain._reduce(KEY_POOL[3]["pub"])

        # Assert
        assert len(result) == 1
    def test_transactions_are_the_same(self):
        blockchain_ref = make_blockchain()
        ref_transactions = blockchain_ref[0].transactions
        outfile = BytesIO()
        blockchain_ref.save_to_file(outfile)
        outfile.seek(0)

        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.from_file(outfile)
        transactions = blockchain[0].transactions

        assert len(transactions) == 3
        assert transactions[0] == ref_transactions[0]
        assert transactions[1] == ref_transactions[1]
        assert transactions[2] == ref_transactions[2]
    def test_signer_is_set(self):
        bc = Blockchain(NEW_USER_PUB_KEY)
        bc.new_block()

        random_sign(bc.last_block())

        assert bc.last_block().signer == REF_PUB_KEY
    def test_raise_exception_if_last_block_not_signed(self):

        # Arrange
        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.new_block()

        # Act
        with pytest.raises(UnsignedPreviousBlockError):
            blockchain.new_block()
    def test_set_previous_block_hash(self):

        # Arrange
        blockchain = Blockchain(NEW_USER_PUB_KEY)
        blockchain.new_block()
        random_sign(blockchain.last_block())

        # Act
        blockchain.new_block()

        # Assert
        assert blockchain[1].previous_block_signature == blockchain[
            0].signature
    def test_empty_ko(self):
        bc = Blockchain(NEW_USER_PUB_KEY)

        result = bc.is_valid()

        assert result is False