def test_valid_transaction_with_invalid_signature():
    transaction = Transaction(Wallet(), 'recipient', 50)

    # Changing the signature of the transaction input with a valid output but from a different wallet instance.
    transaction.input['signature'] = Wallet().sign(transaction.output)

    with pytest.raises(Exception, match="Invalid Signature"):
        Transaction.is_valid_transaction(transaction)
def test_invalid_transaction_with_invalid_output():
    sender_wallet = Wallet()
    transaction = Transaction(sender_wallet, 'recipient', 50)

    # Tests someone trying to get more money
    transaction.output[sender_wallet.address] = 9999

    with pytest.raises(Exception, match="Invalid transaction output values"):
        Transaction.is_valid_transaction(transaction)
def test_valid_transaction():
    Transaction.is_valid_transaction(Transaction(Wallet(), 'recipient', 50))