@@ -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