Skip to content

Commit 9818e0b

Browse files
committed
Adapt cardano_transaction_repository tests with CardanoTransactionsBuilder
Fix 'get_transactions_up_to' so that it returns an empty vec![] with an unknown immutable file number
1 parent 1fab60d commit 9818e0b

File tree

1 file changed

+54
-27
lines changed

1 file changed

+54
-27
lines changed

internal/mithril-persistence/src/database/repository/cardano_transaction_repository.rs

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]
326330
mod 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

Comments
 (0)