@@ -543,144 +543,104 @@ contract SchedulerTest is Test, SchedulerEvents, PulseSchedulerTestUtils {
543543 }
544544
545545 function testAddFundsEnforcesMinimumBalance () public {
546- // First add a subscription with minimum balance
546+ // Create a subscription with minimum balance
547547 uint256 subscriptionId = addTestSubscription (
548548 scheduler,
549549 address (reader)
550550 );
551551
552- // Get subscription parameters and initial balance
552+ // Get subscription parameters and calculate minimum balance
553553 (
554554 SchedulerState.SubscriptionParams memory params ,
555555 SchedulerState.SubscriptionStatus memory status
556556 ) = scheduler.getSubscription (subscriptionId);
557-
558- // Calculate minimum balance
559557 uint256 minimumBalance = scheduler.getMinimumBalance (
560558 uint8 (params.priceIds.length )
561559 );
562-
563- // Verify initial balance is at minimum
564- assertEq (
565- status.balanceInWei,
566- minimumBalance,
567- "Initial balance should equal minimum balance "
568- );
569-
570- // Add some funds to the subscription
571- uint256 additionalFunds = 0.1 ether ;
572- scheduler.addFunds {value: additionalFunds}(subscriptionId);
573-
574- // Verify funds were added
575- (, SchedulerState.SubscriptionStatus memory statusAfterAdd ) = scheduler
576- .getSubscription (subscriptionId);
577- assertEq (
578- statusAfterAdd.balanceInWei,
579- minimumBalance + additionalFunds,
580- "Balance should be increased by the added funds "
581- );
582-
583- // Now create a new subscription but don't fund it fully
584- SchedulerState.SubscriptionParams
585- memory newParams = createDefaultSubscriptionParams (
586- 2 ,
587- address (reader)
588- );
589-
590- // Calculate minimum balance for this new subscription
591- uint256 newMinimumBalance = scheduler.getMinimumBalance (
592- uint8 (newParams.priceIds.length )
593- );
594-
595- // Try to create with insufficient funds
596- uint256 insufficientFunds = newMinimumBalance - 1 wei ;
597- vm.expectRevert (abi.encodeWithSelector (InsufficientBalance.selector ));
598- scheduler.createSubscription {value: insufficientFunds}(newParams);
599-
600- // Create with sufficient funds
601- uint256 newSubscriptionId = scheduler.createSubscription {
602- value: newMinimumBalance
603- }(newParams);
604-
605- // Verify subscription was created with minimum balance
606- (, SchedulerState.SubscriptionStatus memory newStatus ) = scheduler
607- .getSubscription (newSubscriptionId);
608- assertEq (
609- newStatus.balanceInWei,
610- newMinimumBalance,
611- "New subscription balance should equal minimum balance "
612- );
613- }
614-
615- function testAddFundsEnforcesMinimumBalanceForPermanentSubscription ()
616- public
617- {
618- // Create a non-permanent subscription first
619- uint256 subscriptionId = addTestSubscription (
620- scheduler,
621- address (reader)
560+
561+ console.log ("Minimum balance required: " , minimumBalance);
562+ console.log ("Initial balance: " , status.balanceInWei);
563+
564+ // Verify subscription is active
565+ 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+ })
622577 );
623-
624- // Get subscription parameters and initial balance
578+
579+ // Verify the subscription has exactly minimum balance
625580 (
626- SchedulerState.SubscriptionParams memory params ,
627- SchedulerState.SubscriptionStatus memory status
628- ) = scheduler.getSubscription (subscriptionId );
629-
630- // Calculate minimum balance
631- uint256 minimumBalance = scheduler. getMinimumBalance (
632- uint8 (params.priceIds. length )
633- );
634-
635- // Verify initial balance is at minimum
581+ , // Ignore params
582+ SchedulerState.SubscriptionStatus memory exactMinStatus
583+ ) = scheduler.getSubscription (exactMinSubscriptionId );
584+ assertEq (exactMinStatus.balanceInWei, minimumBalance, " Balance should be exactly minimum " );
585+
586+ // Adding 0 funds should succeed (since balance = minimum, not < minimum)
587+ scheduler. addFunds {value: 0 }(exactMinSubscriptionId);
588+
589+ // Verify balance is still at minimum
590+ (, exactMinStatus) = scheduler. getSubscription (exactMinSubscriptionId);
636591 assertEq (
637- status .balanceInWei,
592+ exactMinStatus .balanceInWei,
638593 minimumBalance,
639- "Initial balance should equal minimum balance "
640- );
641-
642- // Make it permanent
643- params.isPermanent = true ;
644- scheduler.updateSubscription (subscriptionId, params);
645-
646- // Try to add funds - this should succeed since we're adding to a permanent subscription
647- uint256 additionalFunds = 0.1 ether ;
648- scheduler.addFunds {value: additionalFunds}(subscriptionId);
649-
650- // Verify funds were added
651- (, SchedulerState.SubscriptionStatus memory statusAfter ) = scheduler
652- .getSubscription (subscriptionId);
594+ "Balance should still be at minimum after adding 0 funds "
595+ );
596+
597+ // Add more funds (should succeed)
598+ scheduler.addFunds {value: 1 wei }(exactMinSubscriptionId);
599+
600+ // Verify balance increased
601+ (, exactMinStatus) = scheduler.getSubscription (exactMinSubscriptionId);
653602 assertEq (
654- statusAfter.balanceInWei,
655- minimumBalance + additionalFunds,
656- "Balance should be increased by the added funds "
657- );
658-
659- // Now test the deposit limit for permanent subscriptions
660- uint256 maxDepositLimit = 100 ether ; // MAX_DEPOSIT_LIMIT from SchedulerState
661-
662- // Try to add funds exceeding the deposit limit
663- vm.expectRevert (
664- abi.encodeWithSelector (MaxDepositLimitExceeded.selector )
603+ exactMinStatus.balanceInWei,
604+ minimumBalance + 1 wei,
605+ "Balance should be minimum + 1 wei after adding funds "
606+ );
607+
608+ // Test 2: Test with a permanent subscription
609+ uint256 permanentSubscriptionId = scheduler.createSubscription {value: minimumBalance}(
610+ SchedulerState.SubscriptionParams ({
611+ priceIds: params.priceIds,
612+ readerWhitelist: params.readerWhitelist,
613+ whitelistEnabled: params.whitelistEnabled,
614+ isActive: true ,
615+ isPermanent: true ,
616+ updateCriteria: params.updateCriteria
617+ })
665618 );
666- scheduler.addFunds {value: maxDepositLimit + 1 }(subscriptionId);
667-
668- // Add funds within the deposit limit
669- uint256 validDeposit = 1 ether ;
670- scheduler.addFunds {value: validDeposit}(subscriptionId);
671-
672- // Verify funds were added
619+
620+ // Verify the permanent subscription has exactly minimum balance
673621 (
674- ,
675- SchedulerState.SubscriptionStatus memory statusAfterValidDeposit
676- ) = scheduler.getSubscription (subscriptionId);
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+
627+ // Adding 0 funds should succeed (since balance = minimum, not < minimum)
628+ scheduler.addFunds {value: 0 }(permanentSubscriptionId);
629+
630+ // Add more funds (should succeed)
631+ scheduler.addFunds {value: 1 wei }(permanentSubscriptionId);
632+
633+ // Verify balance increased
634+ (, permanentStatus) = scheduler.getSubscription (permanentSubscriptionId);
677635 assertEq (
678- statusAfterValidDeposit .balanceInWei,
679- minimumBalance + additionalFunds + validDeposit ,
680- "Balance should be increased by the valid deposit "
636+ permanentStatus .balanceInWei,
637+ minimumBalance + 1 wei ,
638+ "Permanent subscription balance should be minimum + 1 wei after adding funds "
681639 );
682640 }
683641
642+
643+
684644 function testWithdrawFunds () public {
685645 // Add a subscription and get the parameters
686646 uint256 subscriptionId = addTestSubscription (
0 commit comments