@@ -565,32 +565,90 @@ contract SchedulerTest is Test, SchedulerEvents, PulseSchedulerTestUtils {
565565 assertTrue (params.isActive, "Subscription should be active " );
566566 assertEq (status.balanceInWei, minimumBalance, "Initial balance should equal minimum balance " );
567567
568- // Adding 0 funds should succeed (since balance = minimum, not < minimum )
568+ // Step 1: Try to add 0 funds to active subscription at minimum balance (should succeed )
569569 scheduler.addFunds {value: 0 }(subscriptionId);
570570
571- // Verify balance is unchanged
571+ // Verify balance is still at minimum
572572 (
573573 ,
574- SchedulerState.SubscriptionStatus memory updatedStatus
574+ SchedulerState.SubscriptionStatus memory statusAfterAddingZero
575575 ) = scheduler.getSubscription (subscriptionId);
576576 assertEq (
577- updatedStatus .balanceInWei,
577+ statusAfterAddingZero .balanceInWei,
578578 minimumBalance,
579579 "Balance should still be at minimum after adding 0 funds "
580580 );
581581
582- // Add more funds (should succeed)
582+ // Step 2: Add more funds to active subscription (should succeed)
583583 scheduler.addFunds {value: 1 wei }(subscriptionId);
584584
585585 // Verify balance increased
586586 (
587587 ,
588- updatedStatus
588+ SchedulerState.SubscriptionStatus memory statusAfterAddingMore
589589 ) = scheduler.getSubscription (subscriptionId);
590590 assertEq (
591- updatedStatus .balanceInWei,
591+ statusAfterAddingMore .balanceInWei,
592592 minimumBalance + 1 wei,
593- "Balance should be minimum + 1 wei after adding funds "
593+ "Balance should be minimum + 1 wei after adding more funds "
594+ );
595+
596+ // Step 3: Create a new subscription with minimum balance
597+ uint256 subscriptionId2 = addTestSubscription (
598+ scheduler,
599+ address (reader)
600+ );
601+
602+ // Get subscription parameters
603+ (
604+ SchedulerState.SubscriptionParams memory params2 ,
605+ // Status not needed for this test
606+ ) = scheduler.getSubscription (subscriptionId2);
607+
608+ // Step 4: Deactivate the subscription so we can withdraw below minimum
609+ SchedulerState.SubscriptionParams memory deactivatedParams = params2;
610+ deactivatedParams.isActive = false ;
611+ scheduler.updateSubscription (subscriptionId2, deactivatedParams);
612+
613+ // Step 5: Withdraw funds to get below minimum balance
614+ scheduler.withdrawFunds (subscriptionId2, minimumBalance - 1 wei);
615+
616+ // Verify balance is now below minimum
617+ (
618+ ,
619+ SchedulerState.SubscriptionStatus memory statusAfterWithdraw
620+ ) = scheduler.getSubscription (subscriptionId2);
621+ assertEq (
622+ statusAfterWithdraw.balanceInWei,
623+ 1 wei,
624+ "Balance should be 1 wei after withdrawal "
625+ );
626+
627+ // Step 6: Try to add funds to inactive subscription (should revert with InactiveSubscription)
628+ vm.expectRevert (abi.encodeWithSelector (InactiveSubscription.selector ));
629+ scheduler.addFunds {value: 1 wei }(subscriptionId2);
630+
631+ // Step 7: Try to reactivate with insufficient balance (should revert with InsufficientBalance)
632+ SchedulerState.SubscriptionParams memory reactivatedParams = deactivatedParams;
633+ reactivatedParams.isActive = true ;
634+ vm.expectRevert (abi.encodeWithSelector (InsufficientBalance.selector ));
635+ scheduler.updateSubscription (subscriptionId2, reactivatedParams);
636+
637+ // Step 8: Add funds to reach minimum balance while still inactive
638+ scheduler.addFunds {value: minimumBalance}(subscriptionId);
639+
640+ // Step 9: Try to add 0 funds to active subscription at minimum balance (should succeed)
641+ scheduler.addFunds {value: 0 }(subscriptionId);
642+
643+ // Verify balance is still at minimum + 1 wei + minimumBalance
644+ (
645+ ,
646+ SchedulerState.SubscriptionStatus memory statusAfterMoreFunds
647+ ) = scheduler.getSubscription (subscriptionId);
648+ assertEq (
649+ statusAfterMoreFunds.balanceInWei,
650+ minimumBalance + 1 wei + minimumBalance,
651+ "Balance should be minimum + 1 wei + minimumBalance after adding more funds "
594652 );
595653 }
596654
0 commit comments