mint.rs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //! Mint tests
  2. //!
  3. //! This file contains tests that focus on the mint's internal functionality without client interaction.
  4. //! These tests verify the mint's behavior in isolation, such as keyset management, database operations,
  5. //! and other mint-specific functionality that doesn't require wallet clients.
  6. use std::collections::{HashMap, HashSet};
  7. use std::sync::Arc;
  8. use bip39::Mnemonic;
  9. use cdk::cdk_database::MintDatabase;
  10. use cdk::mint::{MintBuilder, MintMeltLimits};
  11. use cdk::nuts::{CurrencyUnit, PaymentMethod};
  12. use cdk::types::{FeeReserve, QuoteTTL};
  13. use cdk_fake_wallet::FakeWallet;
  14. use cdk_sqlite::mint::memory;
  15. pub const MINT_URL: &str = "http://127.0.0.1:8088";
  16. #[tokio::test(flavor = "multi_thread", worker_threads = 1)]
  17. async fn test_correct_keyset() {
  18. let mnemonic = Mnemonic::generate(12).unwrap();
  19. let fee_reserve = FeeReserve {
  20. min_fee_reserve: 1.into(),
  21. percent_fee_reserve: 1.0,
  22. };
  23. let database = memory::empty().await.expect("valid db instance");
  24. let fake_wallet = FakeWallet::new(fee_reserve, HashMap::default(), HashSet::default(), 0);
  25. let localstore = Arc::new(database);
  26. let mut mint_builder = MintBuilder::new(localstore.clone());
  27. mint_builder = mint_builder
  28. .with_name("regtest mint".to_string())
  29. .with_description("regtest mint".to_string());
  30. mint_builder
  31. .add_payment_processor(
  32. CurrencyUnit::Sat,
  33. PaymentMethod::Bolt11,
  34. MintMeltLimits::new(1, 5_000),
  35. Arc::new(fake_wallet),
  36. )
  37. .await
  38. .unwrap();
  39. // .with_seed(mnemonic.to_seed_normalized("").to_vec());
  40. let mint = mint_builder
  41. .build_with_seed(localstore.clone(), &mnemonic.to_seed_normalized(""))
  42. .await
  43. .unwrap();
  44. let mut tx = localstore.begin_transaction().await.unwrap();
  45. let quote_ttl = QuoteTTL::new(10000, 10000);
  46. tx.set_quote_ttl(quote_ttl).await.unwrap();
  47. tx.commit().await.unwrap();
  48. let active = mint.get_active_keysets();
  49. let active = active
  50. .get(&CurrencyUnit::Sat)
  51. .expect("There is a keyset for unit");
  52. let old_keyset_info = mint.get_keyset_info(active).expect("There is keyset");
  53. mint.rotate_keyset(CurrencyUnit::Sat, 32, 0).await.unwrap();
  54. let active = mint.get_active_keysets();
  55. let active = active
  56. .get(&CurrencyUnit::Sat)
  57. .expect("There is a keyset for unit");
  58. let keyset_info = mint.get_keyset_info(active).expect("There is keyset");
  59. assert_ne!(keyset_info.id, old_keyset_info.id);
  60. mint.rotate_keyset(CurrencyUnit::Sat, 32, 0).await.unwrap();
  61. let active = mint.get_active_keysets();
  62. let active = active
  63. .get(&CurrencyUnit::Sat)
  64. .expect("There is a keyset for unit");
  65. let new_keyset_info = mint.get_keyset_info(active).expect("There is keyset");
  66. assert_ne!(new_keyset_info.id, keyset_info.id);
  67. }