tx.rs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. use super::{deposit, get_asset_manager_and_ledger};
  2. use crate::{AccountId, Asset, 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 exchange_id = ledger
  37. .get_transactions(&accounts[0], vec![Type::Exchange])
  38. .await
  39. .expect("valid")[0]
  40. .id()
  41. .clone();
  42. for _ in &accounts {
  43. let txs = ledger
  44. .get_transactions(&accounts[0], vec![Type::Exchange])
  45. .await
  46. .expect("valid");
  47. assert_eq!(1, txs.len());
  48. assert_eq!(exchange_id, *txs[0].id());
  49. }
  50. }