From d23f1123aad98d722b723e90a5f5edf1268f4f1f Mon Sep 17 00:00:00 2001 From: Emins25 <144416197+Emins25@users.noreply.github.com> Date: Thu, 2 Apr 2026 09:04:47 +0800 Subject: [PATCH] test(stream): cover claimable after withdraw polling flow (issue #314) --- contracts/forge-stream/src/lib.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/contracts/forge-stream/src/lib.rs b/contracts/forge-stream/src/lib.rs index dba6db0..14fc4b3 100644 --- a/contracts/forge-stream/src/lib.rs +++ b/contracts/forge-stream/src/lib.rs @@ -1347,6 +1347,32 @@ mod tests { assert_eq!(client.get_claimable(&stream_id), 100_000); // 100 * 1000 } + #[test] + fn test_get_claimable_resets_after_withdraw_and_only_counts_new_accrual() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register_contract(None, ForgeStream); + let client = ForgeStreamClient::new(&env, &contract_id); + let sender = Address::generate(&env); + let recipient = Address::generate(&env); + let token = setup_token(&env, &sender, 100 * 1000); + + let stream_id = client.create_stream(&sender, &token, &recipient, &100, &1000); + env.ledger().with_mut(|l| l.timestamp += 100); + + assert_eq!(client.get_claimable(&stream_id), 10_000); + + let withdrawn = client.withdraw(&stream_id); + assert_eq!(withdrawn, 10_000); + assert_eq!(client.get_claimable(&stream_id), 0); + assert_eq!(client.get_stream_status(&stream_id).withdrawable, 0); + + env.ledger().with_mut(|l| l.timestamp += 50); + + assert_eq!(client.get_claimable(&stream_id), 5_000); + assert_eq!(client.get_stream_status(&stream_id).withdrawable, 5_000); + } + #[test] fn test_get_claimable_cancelled_stream_returns_zero() { let env = Env::default();