Skip to content

Commit 8a5e763

Browse files
test(tx_builder): Add test_add_utxo_final_outpoint_retained
Check that for repeated calls to `add_utxo`, given the same outpoint, the final insertion takes effect. Consolidate `use` statements in `tx_builder::test` mod. Co-authored-by: codingp110 <codingp110@gmail.com>
1 parent 0b5d927 commit 8a5e763

File tree

1 file changed

+47
-8
lines changed

1 file changed

+47
-8
lines changed

src/wallet/tx_builder.rs

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,7 @@ mod test {
931931
};
932932
}
933933

934+
use crate::test_utils::*;
934935
use bitcoin::consensus::deserialize;
935936
use bitcoin::hex::FromHex;
936937
use bitcoin::TxOut;
@@ -1156,7 +1157,6 @@ mod test {
11561157

11571158
#[test]
11581159
fn test_exclude_unconfirmed() {
1159-
use crate::test_utils::*;
11601160
use bdk_chain::BlockId;
11611161
use bitcoin::{hashes::Hash, BlockHash, Network};
11621162

@@ -1246,7 +1246,6 @@ mod test {
12461246

12471247
#[test]
12481248
fn test_build_fee_bump_remove_change_output_single_desc() {
1249-
use crate::test_utils::*;
12501249
use bdk_chain::BlockId;
12511250
use bitcoin::{hashes::Hash, BlockHash, Network};
12521251

@@ -1292,8 +1291,6 @@ mod test {
12921291

12931292
#[test]
12941293
fn duplicated_utxos_in_add_utxos_are_only_added_once() {
1295-
use crate::test_utils::get_funded_wallet_wpkh;
1296-
12971294
let (mut wallet, _) = get_funded_wallet_wpkh();
12981295
let utxo = wallet.list_unspent().next().unwrap();
12991296
let op = utxo.outpoint;
@@ -1306,7 +1303,6 @@ mod test {
13061303

13071304
#[test]
13081305
fn not_duplicated_utxos_in_required_list() {
1309-
use crate::test_utils::get_funded_wallet_wpkh;
13101306
let (mut wallet1, _) = get_funded_wallet_wpkh();
13111307
let utxo1 @ LocalOutput { outpoint, .. } = wallet1.list_unspent().next().unwrap();
13121308
let mut builder = wallet1.build_tx();
@@ -1321,10 +1317,54 @@ mod test {
13211317
assert_eq!(vec![fake_weighted_utxo], builder.params.utxos);
13221318
}
13231319

1320+
// This test demonstrates that `add_utxo` only considers the final insertion.
13241321
#[test]
1325-
fn not_duplicated_foreign_utxos_with_same_outpoint_but_different_weight() {
1326-
use crate::test_utils::{get_funded_wallet_single, get_funded_wallet_wpkh, get_test_wpkh};
1322+
fn test_add_utxo_final_outpoint_retained() {
1323+
// Create empty wallet
1324+
let (desc, change_desc) = get_test_wpkh_and_change_desc();
1325+
let mut wallet = Wallet::create(desc, change_desc)
1326+
.network(bdk_wallet::bitcoin::Network::Regtest)
1327+
.create_wallet_no_persist()
1328+
.unwrap();
1329+
1330+
let outpoint_0 = receive_output(
1331+
&mut wallet,
1332+
Amount::from_sat(35_000),
1333+
ReceiveTo::Mempool(50),
1334+
);
1335+
let outpoint_1 = receive_output(
1336+
&mut wallet,
1337+
Amount::from_sat(25_200),
1338+
ReceiveTo::Mempool(100),
1339+
);
1340+
1341+
let send_to = wallet.next_unused_address(KeychainKind::External).address;
1342+
let mut tx_builder = wallet.build_tx();
1343+
tx_builder
1344+
.add_utxo(outpoint_0)
1345+
.unwrap()
1346+
.add_utxo(outpoint_1)
1347+
.unwrap()
1348+
.add_utxo(outpoint_0)
1349+
.unwrap()
1350+
.add_recipient(send_to.script_pubkey(), Amount::from_sat(60_000))
1351+
.fee_rate(FeeRate::from_sat_per_vb(1).unwrap())
1352+
.ordering(crate::TxOrdering::Untouched);
1353+
let psbt = tx_builder.finish().unwrap();
1354+
1355+
assert_eq!(
1356+
psbt.unsigned_tx
1357+
.input
1358+
.iter()
1359+
.map(|txin| txin.previous_output)
1360+
.collect::<Vec<_>>(),
1361+
vec![outpoint_1, outpoint_0],
1362+
"Last outpoint added should be retained"
1363+
);
1364+
}
13271365

1366+
#[test]
1367+
fn not_duplicated_foreign_utxos_with_same_outpoint_but_different_weight() {
13281368
// Use two different wallets to avoid adding local UTXOs
13291369
let (wallet1, txid1) = get_funded_wallet_wpkh();
13301370
let (mut wallet2, txid2) = get_funded_wallet_single(get_test_wpkh());
@@ -1380,7 +1420,6 @@ mod test {
13801420
// Test that local outputs have precedence over utxos added via `add_foreign_utxo`
13811421
#[test]
13821422
fn test_local_utxos_have_precedence_over_foreign_utxos() {
1383-
use crate::test_utils::get_funded_wallet_wpkh;
13841423
let (mut wallet, _) = get_funded_wallet_wpkh();
13851424

13861425
let utxo = wallet.list_unspent().next().unwrap();

0 commit comments

Comments
 (0)