tx.rs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. use super::{deposit, get_asset_manager_and_ledger};
  2. use crate::{AccountId, Asset, Filter, Type};
  3. #[tokio::test]
  4. async fn multi_account_transfers() {
  5. let accounts = (0..100)
  6. .map(|i| format!("account{}", i).parse::<AccountId>())
  7. .collect::<Result<Vec<AccountId>, _>>()
  8. .expect("valid");
  9. let target = "target".parse::<AccountId>().expect("target account");
  10. let ledger = get_asset_manager_and_ledger().await;
  11. let usd: Asset = "USD/2".parse().expect("asset");
  12. for account in &accounts {
  13. deposit(&ledger, account, usd.from_human("1000").expect("amount")).await;
  14. }
  15. let mut from = vec![];
  16. for (p, account) in accounts.iter().enumerate() {
  17. assert_eq!(
  18. vec![usd.from_human("1000").expect("amount"),],
  19. ledger.get_balance(account).await.expect("balance")
  20. );
  21. from.push((account.clone(), usd.new_amount(1000 * ((p + 1) as i128))));
  22. }
  23. ledger
  24. .new_transaction(
  25. "test tx".to_owned(),
  26. "settled".into(),
  27. from,
  28. vec![(target.clone(), usd.from_human("50500").expect("amount"))],
  29. )
  30. .await
  31. .expect("valid tx");
  32. assert_eq!(
  33. vec![usd.from_human("50500").expect("amount"),],
  34. ledger.get_balance(&target).await.expect("balance")
  35. );
  36. let filter = Filter {
  37. spends: vec![accounts[0].clone()],
  38. typ: vec![Type::Exchange],
  39. ..Default::default()
  40. };
  41. let rev_id = ledger.get_transactions(filter).await.expect("valid")[0]
  42. .revision_id
  43. .clone();
  44. for _ in &accounts {
  45. let filter = Filter {
  46. spends: vec![accounts[0].clone()],
  47. typ: vec![Type::Exchange],
  48. ..Default::default()
  49. };
  50. let txs = ledger.get_transactions(filter).await.expect("valid");
  51. assert_eq!(1, txs.len());
  52. assert_eq!(rev_id, txs[0].revision_id);
  53. }
  54. }