@@ -561,51 +561,98 @@ contract SchedulerTest is Test, SchedulerEvents, PulseSchedulerTestUtils {
561561 console.log ("Minimum balance required: " , minimumBalance);
562562 console.log ("Initial balance: " , status.balanceInWei);
563563
564- // Verify subscription is active
564+ // Verify subscription is active and has exactly minimum balance
565565 assertTrue (params.isActive, "Subscription should be active " );
566-
567- // Test 1: Create an active subscription with exactly minimum balance
568- uint256 exactMinSubscriptionId = scheduler.createSubscription {value: minimumBalance}(
569- SchedulerState.SubscriptionParams ({
570- priceIds: params.priceIds,
571- readerWhitelist: params.readerWhitelist,
572- whitelistEnabled: params.whitelistEnabled,
573- isActive: true ,
574- isPermanent: false ,
575- updateCriteria: params.updateCriteria
576- })
577- );
578-
579- // Verify the subscription has exactly minimum balance
580- (
581- , // Ignore params
582- SchedulerState.SubscriptionStatus memory exactMinStatus
583- ) = scheduler.getSubscription (exactMinSubscriptionId);
584- assertEq (exactMinStatus.balanceInWei, minimumBalance, "Balance should be exactly minimum " );
566+ assertEq (status.balanceInWei, minimumBalance, "Initial balance should equal minimum balance " );
585567
586568 // Adding 0 funds should succeed (since balance = minimum, not < minimum)
587- scheduler.addFunds {value: 0 }(exactMinSubscriptionId );
569+ scheduler.addFunds {value: 0 }(subscriptionId );
588570
589- // Verify balance is still at minimum
590- (, exactMinStatus) = scheduler.getSubscription (exactMinSubscriptionId);
571+ // Verify balance is unchanged
572+ (
573+ ,
574+ SchedulerState.SubscriptionStatus memory updatedStatus
575+ ) = scheduler.getSubscription (subscriptionId);
591576 assertEq (
592- exactMinStatus .balanceInWei,
577+ updatedStatus .balanceInWei,
593578 minimumBalance,
594579 "Balance should still be at minimum after adding 0 funds "
595580 );
596581
597582 // Add more funds (should succeed)
598- scheduler.addFunds {value: 1 wei }(exactMinSubscriptionId );
583+ scheduler.addFunds {value: 1 wei }(subscriptionId );
599584
600585 // Verify balance increased
601- (, exactMinStatus) = scheduler.getSubscription (exactMinSubscriptionId);
586+ (
587+ ,
588+ updatedStatus
589+ ) = scheduler.getSubscription (subscriptionId);
602590 assertEq (
603- exactMinStatus .balanceInWei,
591+ updatedStatus .balanceInWei,
604592 minimumBalance + 1 wei,
605593 "Balance should be minimum + 1 wei after adding funds "
606594 );
595+ }
596+
597+ function testAddFundsWithInactiveSubscription () public {
598+ // Create a subscription with minimum balance
599+ uint256 subscriptionId = addTestSubscription (
600+ scheduler,
601+ address (reader)
602+ );
603+
604+ // Get subscription parameters and calculate minimum balance
605+ (
606+ SchedulerState.SubscriptionParams memory params ,
607+ // Status not needed for this test
608+ ) = scheduler.getSubscription (subscriptionId);
609+ uint256 minimumBalance = scheduler.getMinimumBalance (
610+ uint8 (params.priceIds.length )
611+ );
612+
613+ // Deactivate the subscription
614+ SchedulerState.SubscriptionParams memory testParams = params;
615+ testParams.isActive = false ;
616+ scheduler.updateSubscription (subscriptionId, testParams);
617+
618+ // Withdraw funds to get below minimum
619+ uint256 withdrawAmount = minimumBalance - 1 wei ;
620+ scheduler.withdrawFunds (subscriptionId, withdrawAmount);
621+
622+ // Verify balance is now below minimum
623+ (
624+ SchedulerState.SubscriptionParams memory testUpdatedParams ,
625+ SchedulerState.SubscriptionStatus memory testUpdatedStatus
626+ ) = scheduler.getSubscription (subscriptionId);
627+ assertEq (testUpdatedStatus.balanceInWei, 1 wei, "Balance should be 1 wei after withdrawal " );
607628
608- // Test 2: Test with a permanent subscription
629+ // Try to add funds to inactive subscription (should fail with InactiveSubscription)
630+ vm.expectRevert (abi.encodeWithSelector (InactiveSubscription.selector ));
631+ scheduler.addFunds {value: 1 wei }(subscriptionId);
632+
633+ // Try to reactivate with insufficient balance (should fail)
634+ testUpdatedParams.isActive = true ;
635+ vm.expectRevert (abi.encodeWithSelector (InsufficientBalance.selector ));
636+ scheduler.updateSubscription (subscriptionId, testUpdatedParams);
637+ }
638+
639+ function testAddFundsEnforcesMinimumBalanceForPermanentSubscription () public {
640+ // Create a subscription with minimum balance
641+ uint256 subscriptionId = addTestSubscription (
642+ scheduler,
643+ address (reader)
644+ );
645+
646+ // Get subscription parameters and calculate minimum balance
647+ (
648+ SchedulerState.SubscriptionParams memory params ,
649+ // Status not needed for this test
650+ ) = scheduler.getSubscription (subscriptionId);
651+ uint256 minimumBalance = scheduler.getMinimumBalance (
652+ uint8 (params.priceIds.length )
653+ );
654+
655+ // Create a permanent subscription with minimum balance
609656 uint256 permanentSubscriptionId = scheduler.createSubscription {value: minimumBalance}(
610657 SchedulerState.SubscriptionParams ({
611658 priceIds: params.priceIds,
@@ -617,21 +664,17 @@ contract SchedulerTest is Test, SchedulerEvents, PulseSchedulerTestUtils {
617664 })
618665 );
619666
620- // Verify the permanent subscription has exactly minimum balance
621- (
622- , // Ignore params
623- SchedulerState.SubscriptionStatus memory permanentStatus
624- ) = scheduler.getSubscription (permanentSubscriptionId);
625- assertEq (permanentStatus.balanceInWei, minimumBalance, "Permanent subscription balance should be exactly minimum " );
626-
627667 // Adding 0 funds should succeed (since balance = minimum, not < minimum)
628668 scheduler.addFunds {value: 0 }(permanentSubscriptionId);
629669
630670 // Add more funds (should succeed)
631671 scheduler.addFunds {value: 1 wei }(permanentSubscriptionId);
632672
633673 // Verify balance increased
634- (, permanentStatus) = scheduler.getSubscription (permanentSubscriptionId);
674+ (
675+ ,
676+ SchedulerState.SubscriptionStatus memory permanentStatus
677+ ) = scheduler.getSubscription (permanentSubscriptionId);
635678 assertEq (
636679 permanentStatus.balanceInWei,
637680 minimumBalance + 1 wei,
0 commit comments