From 8fa354e6ed40be0696a6e4e9bd665f5af8dff4c0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 1 Jun 2026 23:14:47 +0100 Subject: [PATCH] test: add batch_charge large-list stress test --- contract/src/test.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/contract/src/test.rs b/contract/src/test.rs index 767ca57..c739df7 100644 --- a/contract/src/test.rs +++ b/contract/src/test.rs @@ -557,6 +557,37 @@ fn test_batch_charge_no_subscription() { assert_eq!(results.get(0).unwrap(), crate::ChargeResult::NoSubscription); } +#[test] +fn test_batch_charge_stress() { + let (env, contract_id, token_addr, _user, merchant) = setup(); + let client = FlowPayClient::new(&env, &contract_id); + let token = TokenClient::new(&env, &token_addr); + let sac = StellarAssetClient::new(&env, &token_addr); + + env.budget().reset_unlimited(); + + let num_users = 100; + let mut users = soroban_sdk::Vec::new(&env); + let interval = 86400; + + for _ in 0..num_users { + let u = Address::generate(&env); + sac.mint(&u, &10_000_0000000); + token.approve(&u, &contract_id, &10_000_0000000, &200); + client.subscribe(&u, &merchant, &1_0000000, &interval, &token_addr, &None, &None); + users.push_back(u); + } + + env.ledger().with_mut(|l| { l.timestamp += interval + 1; }); + + let results = client.batch_charge(&users); + + assert_eq!(results.len(), num_users); + for r in results.into_iter() { + assert_eq!(r, crate::ChargeResult::Charged); + } +} + #[test] fn test_batch_charge_inactive() { let (env, contract_id, token_addr, user, merchant) = setup(); @@ -1194,6 +1225,7 @@ fn test_custom_sac_token_end_to_end_flow() { // Verify subscription is still active after pay_per_use let sub_final = client.get_subscription(&user).unwrap(); assert!(sub_final.active, "subscription should remain active after pay_per_use"); +} // ───────────────────────────────────────────────────────────── // Issue #237: get_token() read function tests // ─────────────────────────────────────────────────────────────