diff --git a/tests/unit/wallet/test_transaction.py b/tests/unit/wallet/test_transaction.py index c4cb22dcd..c49cee513 100644 --- a/tests/unit/wallet/test_transaction.py +++ b/tests/unit/wallet/test_transaction.py @@ -424,3 +424,68 @@ class TransactionIOBalancing(AsyncioTestCase): self.assertListEqual([0.01, 1], self.inputs(tx)) # change is now needed to consume extra input self.assertListEqual([0.97], self.outputs(tx)) + + async def test_basic_use_cases_sqlite(self): + self.ledger.coin_selection_strategy = 'sqlite' + self.ledger.fee_per_byte = int(.01*CENT) + + # available UTXOs for filling missing inputs + utxos = await self.create_utxos([ + 1, 1, 3, 5, 10 + ]) + # pay 3 coins (3.07 w/ fees) + tx = await self.tx( + [], # inputs + [self.txo(3)] # outputs + ) + # there are 4x 1.0 utxos available + self.assertListEqual(self.inputs(tx), [1.0, 1.0, 1.0, 1.0]) + + # a change of 0.93 is added to reach balance + self.assertListEqual(self.outputs(tx), [3, 0.93]) + + await self.ledger.release_outputs(utxos) + + # pay 6.917 coins (7.00 w/ fees) + tx = await self.tx( + [], # inputs + [self.txo(6.917)] # outputs + ) + + self.assertListEqual(self.inputs(tx), [1.0, 1.0, 1.0, 1.0, 3.0]) + self.assertListEqual(self.outputs(tx), [6.92]) + + await self.ledger.release_outputs(utxos) + + # supplied input and output, but input is not enough to cover output + tx = await self.tx( + [self.txi(self.txo(10))], # inputs + [self.txo(11)] # outputs + ) + # additional input is chosen (UTXO 1) + self.assertListEqual([10, 1.0, 1.0], self.inputs(tx)) + # change is now needed to consume extra input + self.assertListEqual([11, 0.95], self.outputs(tx)) + + await self.ledger.release_outputs(utxos) + + # liquidating a UTXO + tx = await self.tx( + [self.txi(self.txo(10))], # inputs + [] # outputs + ) + self.assertListEqual([10], self.inputs(tx)) + # missing change added to consume the amount + self.assertListEqual([9.98], self.outputs(tx)) + + await self.ledger.release_outputs(utxos) + + # liquidating at a loss, requires adding extra inputs + tx = await self.tx( + [self.txi(self.txo(0.01))], # inputs + [] # outputs + ) + # UTXO 1 is added to cover some of the fee + self.assertListEqual([0.01, 1], self.inputs(tx)) + # change is now needed to consume extra input + self.assertListEqual([0.97], self.outputs(tx))