From ae38b4fd7c876ecdd84c91fb9b457c37831f580d Mon Sep 17 00:00:00 2001 From: eric-volz Date: Sun, 20 Aug 2023 23:06:27 +0200 Subject: [PATCH] add test for txbuilder ad fix small bug --- defichain/transactions/builder/txbuilder.py | 6 +-- tests/transactions/builder/__init__.py | 22 ++++++-- tests/transactions/builder/test_txbuilder.py | 54 ++++++++++++++++++++ 3 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 tests/transactions/builder/test_txbuilder.py diff --git a/defichain/transactions/builder/txbuilder.py b/defichain/transactions/builder/txbuilder.py index 5e51eff..db5bb54 100644 --- a/defichain/transactions/builder/txbuilder.py +++ b/defichain/transactions/builder/txbuilder.py @@ -123,9 +123,9 @@ def test_tx(self, tx: "Transaction | str", maxFeeRate: float = None) -> bool: raise TxBuilderError("The transaction cannot be tested because no data source is given") def _verify(self): - if not (self.get_address() != self.get_account().get_p2pkh() or - self.get_address() != self.get_account().get_p2sh() or - self.get_address() != self.get_account().get_p2wpkh()): + if not (self.get_address() == self.get_account().get_p2pkh() or + self.get_address() == self.get_account().get_p2sh() or + self.get_address() == self.get_account().get_p2wpkh()): raise TxBuilderError("The given address does not match the given account!") def get_inputs_tx(self) -> Transaction: diff --git a/tests/transactions/builder/__init__.py b/tests/transactions/builder/__init__.py index daa17bd..d1c5e8f 100644 --- a/tests/transactions/builder/__init__.py +++ b/tests/transactions/builder/__init__.py @@ -1,5 +1,6 @@ from defichain import Wallet, Ocean, TxBuilder from defichain.networks import DefichainMainnet +from defichain.transactions.rawtransactions import Transaction from defichain.transactions.utils import BuildAddressAmounts @@ -19,9 +20,10 @@ class Addresses: P2WPKH: str = Keys.wallet.p2wpkh_address() -builder_p2pkh = TxBuilder(Keys.account.get_p2pkh(), Keys.account, Ocean()) -builder_p2sh = TxBuilder(Keys.account.get_p2sh(), Keys.account, Ocean()) -builder_p2wpkh = TxBuilder(Keys.account.get_p2wpkh(), Keys.account, Ocean()) +ocean = Ocean() +builder_p2pkh = TxBuilder(Keys.account.get_p2pkh(), Keys.account, ocean) +builder_p2sh = TxBuilder(Keys.account.get_p2sh(), Keys.account, ocean) +builder_p2wpkh = TxBuilder(Keys.account.get_p2wpkh(), Keys.account, ocean) class TestAccounts: @@ -49,7 +51,16 @@ class TestPool: class TestTxBuilder: - pass + tx_serialized = "040000000001011f5bf7e7c3bb19f0859837bf0a2c2fa45122657dd6b8249c49cbad808aa5a9720100000000ffffffff" \ + "020000000000000000446a424466547842160014e9678d52be85d48ee605909dd937136b0798ec880117a914b1e44951" \ + "2e420ba5e2e66c08b427ac5f04c2c19d87010f000000cb90a8010000000000d8cac10500000000160014e9678d52be85" \ + "d48ee605909dd937136b0798ec880002473044022014102e4032ad8dc30dbd74203dd678bec62efc857df19cd9295c66" \ + "a1f0e52bd202207e5afe81ccc521c7d7a259d93445b4f2892298f3b092e2e199de277d683e8b19012103e536a76363d1" \ + "e4b44f9548c9e53f9d7c2fd8d354e0009c71f7f1944db13733b200000000" + tx = Transaction.deserialize(DefichainMainnet, tx_serialized) + + inputs_tx_serialized = "040000000149b8ea9b2b0224e44126b86bd1e2889a7dac0ec06fcfb0dc4dd13782e1c84fce0100000000fffff" \ + "fff0000000000" class TestUTXO: @@ -106,3 +117,6 @@ class TestUTXO: class TestVault: pass + + +print(builder_p2wpkh.get_inputs_tx()) diff --git a/tests/transactions/builder/test_txbuilder.py b/tests/transactions/builder/test_txbuilder.py new file mode 100644 index 0000000..031b783 --- /dev/null +++ b/tests/transactions/builder/test_txbuilder.py @@ -0,0 +1,54 @@ +import pytest +from . import Keys, TestTxBuilder, builder_p2wpkh, Addresses + +from defichain import TxBuilder, Ocean +from defichain.exceptions.transactions import TxBuilderError +from defichain.exceptions.http import BadRequest + + +@pytest.mark.transactions +def test_create(): # 01 + assert TxBuilder(address=Keys.account.get_p2wpkh(), account=Keys.account, dataSource=Ocean(), feePerByte=1.0) + with pytest.raises(TxBuilderError, match="The given address does not match the given account!"): + assert TxBuilder(address=Keys.account.get_p2wpkh(), account=Keys.wallet.get_account(10), + dataSource=Ocean(), feePerByte=1.0) + + +@pytest.mark.transactions +def test_send_tx(): # 02 + with pytest.raises(BadRequest): + assert builder_p2wpkh.send_tx(TestTxBuilder.tx_serialized) + with pytest.raises(BadRequest): + assert builder_p2wpkh.send_tx(TestTxBuilder.tx) + + +@pytest.mark.transactions +def test_test_tx(): # 03 + assert builder_p2wpkh.test_tx(TestTxBuilder.tx_serialized) + assert builder_p2wpkh.test_tx(TestTxBuilder.tx) + + +@pytest.mark.transactions +def test_get_inputs_tx(): # 04 + assert builder_p2wpkh.get_inputs_tx().serialize() == TestTxBuilder.inputs_tx_serialized + + +@pytest.mark.transactions +def test_get_address(): # 05 + assert builder_p2wpkh.get_address() == Addresses.P2WPKH + + +@pytest.mark.transactions +def test_get_account(): # 06 + assert builder_p2wpkh.get_account() == Keys.account + + +@pytest.mark.transactions +def test_get_dataSource(): # 07 + assert builder_p2wpkh.get_dataSource() + + +@pytest.mark.transactions +def test_get_feePerByte(): # 08 + assert builder_p2wpkh.get_feePerByte() == 1 +