From de53d721913537f56281a134270eafd356f908ad Mon Sep 17 00:00:00 2001 From: Daniela Brozzoni Date: Wed, 8 May 2024 15:33:06 +0200 Subject: [PATCH] test: Only the highest ord keychain is returned --- .../chain/tests/test_keychain_txout_index.rs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/crates/chain/tests/test_keychain_txout_index.rs b/crates/chain/tests/test_keychain_txout_index.rs index 849cfee1..55af741c 100644 --- a/crates/chain/tests/test_keychain_txout_index.rs +++ b/crates/chain/tests/test_keychain_txout_index.rs @@ -742,3 +742,38 @@ fn applying_changesets_one_by_one_vs_aggregate_must_have_same_result() { indexer_b.last_revealed_indices() ); } + +// When the same descriptor is associated with various keychains, +// index methods only return the highest keychain by Ord +#[test] +fn test_only_highest_ord_keychain_is_returned() { + let desc = parse_descriptor(DESCRIPTORS[0]); + + let mut indexer = KeychainTxOutIndex::::new(0); + let _ = indexer.insert_descriptor(TestKeychain::Internal, desc.clone()); + let _ = indexer.insert_descriptor(TestKeychain::External, desc); + + // reveal_next_spk will work with either keychain + let spk0: ScriptBuf = indexer + .reveal_next_spk(&TestKeychain::External) + .unwrap() + .0 + .1 + .into(); + let spk1: ScriptBuf = indexer + .reveal_next_spk(&TestKeychain::Internal) + .unwrap() + .0 + .1 + .into(); + + // index_of_spk will always return External + assert_eq!( + indexer.index_of_spk(&spk0), + Some((TestKeychain::External, 0)) + ); + assert_eq!( + indexer.index_of_spk(&spk1), + Some((TestKeychain::External, 1)) + ); +}