@@ -68,15 +68,19 @@ impl CardanoTransactionRepository {
6868 ) -> StdResult < Vec < CardanoTransactionRecord > > {
6969 // Get the highest block number for the given immutable number.
7070 // This is a temporary fix that will be removed when the retrieval is based on block number instead of immutable number.
71- let block_number = self
71+
72+ if let Some ( block_number) = self
7273 . get_highest_block_number_for_immutable_number ( beacon)
7374 . await ?
74- . unwrap_or ( 0 ) ;
75- let provider = GetCardanoTransactionProvider :: new ( & self . connection ) ;
76- let filters = provider. get_transaction_between_blocks_condition ( 0 ..block_number + 1 ) ;
77- let transactions = provider. find ( filters) ?;
75+ {
76+ let provider = GetCardanoTransactionProvider :: new ( & self . connection ) ;
77+ let filters = provider. get_transaction_between_blocks_condition ( 0 ..block_number + 1 ) ;
78+ let transactions = provider. find ( filters) ?;
7879
79- Ok ( transactions. collect ( ) )
80+ Ok ( transactions. collect ( ) )
81+ } else {
82+ Ok ( vec ! [ ] )
83+ }
8084 }
8185
8286 /// Return the [CardanoTransactionRecord] for the given transaction hash.
@@ -324,6 +328,8 @@ impl BlockRangeRootRetriever for CardanoTransactionRepository {
324328
325329#[ cfg( test) ]
326330mod tests {
331+ use mithril_common:: test_utils:: CardanoTransactionsBuilder ;
332+
327333 use crate :: database:: provider:: GetBlockRangeRootProvider ;
328334 use crate :: database:: test_helper:: cardano_tx_db_connection;
329335 use crate :: sqlite:: GetAllProvider ;
@@ -470,23 +476,20 @@ mod tests {
470476 let connection = Arc :: new ( cardano_tx_db_connection ( ) . unwrap ( ) ) ;
471477 let repository = CardanoTransactionRepository :: new ( connection) ;
472478
473- // Build transactions with block numbers from 20 to 40 and immutable file numbers from 12 to 14
474- let cardano_transactions: Vec < CardanoTransactionRecord > = ( 20 ..=40 )
475- . map ( |i| CardanoTransactionRecord {
476- transaction_hash : format ! ( "tx-hash-{i}" ) ,
477- block_number : i,
478- slot_number : i * 100 ,
479- block_hash : format ! ( "block-hash-{i}" ) ,
480- immutable_file_number : i / 10 + 10 ,
481- } )
479+ let cardano_transactions: Vec < CardanoTransactionRecord > = CardanoTransactionsBuilder :: new ( )
480+ . per_immutable_file ( 10 )
481+ . first_immutable_file ( 120 )
482+ . build_transactions ( 40 )
483+ . iter ( )
484+ . map ( |transaction| CardanoTransactionRecord :: from ( transaction. clone ( ) ) )
482485 . collect ( ) ;
483486
484487 repository
485488 . create_transactions ( cardano_transactions. clone ( ) )
486489 . await
487490 . unwrap ( ) ;
488491
489- let transaction_result = repository. get_transactions_up_to ( 12 ) . await . unwrap ( ) ;
492+ let transaction_result = repository. get_transactions_up_to ( 120 ) . await . unwrap ( ) ;
490493 let transaction_up_to_immutable_file_number_12 = cardano_transactions[ 0 ..10 ] . to_vec ( ) ;
491494 assert_eq ! (
492495 transaction_up_to_immutable_file_number_12,
@@ -497,7 +500,28 @@ mod tests {
497500 let transaction_all = cardano_transactions[ ..] . to_vec ( ) ;
498501 assert_eq ! ( transaction_all, transaction_result) ;
499502
500- let transaction_result = repository. get_transactions_up_to ( 9 ) . await . unwrap ( ) ;
503+ let transaction_result = repository. get_transactions_up_to ( 90 ) . await . unwrap ( ) ;
504+ assert_eq ! ( Vec :: <CardanoTransactionRecord >:: new( ) , transaction_result) ;
505+ }
506+
507+ #[ tokio:: test]
508+ async fn get_transactions_up_to_return_empty_list_when_no_record_found_with_provided_immutable_file_number (
509+ ) {
510+ let connection = Arc :: new ( cardano_tx_db_connection ( ) . unwrap ( ) ) ;
511+ let repository = CardanoTransactionRepository :: new ( connection) ;
512+
513+ repository
514+ . create_transactions ( vec ! [ CardanoTransaction :: new(
515+ "tx-hash-123" . to_string( ) ,
516+ 0 ,
517+ 50 ,
518+ "block-hash-0" ,
519+ 99 ,
520+ ) ] )
521+ . await
522+ . unwrap ( ) ;
523+
524+ let transaction_result = repository. get_transactions_up_to ( 90 ) . await . unwrap ( ) ;
501525 assert_eq ! ( Vec :: <CardanoTransactionRecord >:: new( ) , transaction_result) ;
502526 }
503527
@@ -525,7 +549,7 @@ mod tests {
525549 }
526550
527551 #[ tokio:: test]
528- async fn repository_store_transactions_with_existing_hash_doesnt_erase_existing_data ( ) {
552+ async fn repository_store_transactions_doesnt_erase_existing_data ( ) {
529553 let connection = Arc :: new ( cardano_tx_db_connection ( ) . unwrap ( ) ) ;
530554 let repository = CardanoTransactionRepository :: new ( connection) ;
531555
@@ -871,21 +895,18 @@ mod tests {
871895 let connection = Arc :: new ( cardano_tx_db_connection ( ) . unwrap ( ) ) ;
872896 let repository = CardanoTransactionRepository :: new ( connection) ;
873897
874- // Build transactions with block numbers from 20 to 50
875- let cardano_transactions: Vec < CardanoTransactionRecord > = ( 20 ..=50 )
876- . map ( |i| CardanoTransactionRecord {
877- transaction_hash : format ! ( "tx-hash-{i}" ) ,
878- block_number : i,
879- slot_number : i * 100 ,
880- block_hash : format ! ( "block-hash-{i}" ) ,
881- immutable_file_number : 1 ,
882- } )
898+ let cardano_transactions: Vec < CardanoTransactionRecord > = CardanoTransactionsBuilder :: new ( )
899+ . blocks_per_block_range ( 15 )
900+ . build_transactions ( 53 )
901+ . iter ( )
902+ . map ( |transaction| CardanoTransactionRecord :: from ( transaction. clone ( ) ) )
883903 . collect ( ) ;
884904
885905 repository
886906 . create_transactions ( cardano_transactions. clone ( ) )
887907 . await
888908 . unwrap ( ) ;
909+ // Use by 'prune_transaction' to get the block_range of the highest block number
889910 repository
890911 . create_block_range_roots ( vec ! [ (
891912 BlockRange :: from_block_number( 45 ) ,
@@ -911,6 +932,12 @@ mod tests {
911932 . await
912933 . unwrap ( ) ;
913934 assert_eq ! ( Vec :: <CardanoTransactionRecord >:: new( ) , transaction_result) ;
935+
936+ let transaction_result = repository
937+ . get_transactions_in_range_blocks ( 25 ..1000 )
938+ . await
939+ . unwrap ( ) ;
940+ assert_eq ! ( 28 , transaction_result. len( ) ) ;
914941 }
915942
916943 #[ tokio:: test]
0 commit comments