@@ -25,6 +25,12 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
2525 address SERVICE1 = makeAddr ("Service1 " );
2626 address SERVICE2 = makeAddr ("Service2 " );
2727
28+ uint256 STRATEGY1 = 1 ;
29+ uint32 STRATEGY1_INITIAL_FEE = 5 ;
30+ uint32 STRATEGY1_UPDATE_FEE = 10 ;
31+ address ERC20_ADDRESS1 = address (erc20mock);
32+ address ERC20_ADDRESS2 = address (erc20mock2);
33+
2834 address constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE ;
2935
3036 uint256 constant INITIAL_USER1_BALANCE_ERC20 = 1000 * 10 ** 18 ;
@@ -268,7 +274,7 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
268274 vm.stopPrank ();
269275 }
270276
271- function testRemoveDelgateBalanceAndComputeTotal () public {
277+ function testRemoveDelegatedBalanceAndComputeTotal () public {
272278 testUpdateTotalDelegatedPercentage (100 , 200 );
273279 vm.startPrank (USER1);
274280 proxiedManager.removeDelegatedBalance (RECEIVER);
@@ -305,15 +311,15 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
305311
306312 function testCreateStrategy () public {
307313 vm.startPrank (USER1);
308- uint256 strategyId1 = proxiedManager.createStrategy (5 );
314+ uint256 strategyId1 = proxiedManager.createStrategy (STRATEGY1_INITIAL_FEE );
309315 proxiedManager.createStrategy (100 );
310316 proxiedManager.createStrategy (1000 );
311317 uint256 strategyId4 = proxiedManager.createStrategy (10_000 );
312318 assertEq (strategyId1, 1 , "Strategy id 1 was saved correctly " );
313319 assertEq (strategyId4, 4 , "Strategy id 4 was saved correctly " );
314320 (address owner , uint32 delegationFeeOnRewards ,,) = proxiedManager.strategies (strategyId1);
315321 assertEq (owner, USER1, "Strategy owner " );
316- assertEq (delegationFeeOnRewards, 5 , "Strategy fee " );
322+ assertEq (delegationFeeOnRewards, STRATEGY1_INITIAL_FEE , "Strategy fee " );
317323 vm.stopPrank ();
318324 }
319325
@@ -333,7 +339,7 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
333339
334340 function testCreateStrategyAndSingleDeposit () public {
335341 vm.startPrank (USER1);
336- uint256 strategyId = proxiedManager.createStrategy (1 );
342+ uint256 strategyId = proxiedManager.createStrategy (STRATEGY1_INITIAL_FEE );
337343 erc20mock.approve (address (proxiedManager), 200_000 );
338344 proxiedManager.depositERC20 (strategyId, erc20mock, 100_000 );
339345
@@ -347,7 +353,7 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
347353
348354 function testCreateStrategyAndMultipleDeposits () public {
349355 vm.startPrank (USER1);
350- uint256 strategyId = proxiedManager.createStrategy (1 );
356+ uint256 strategyId = proxiedManager.createStrategy (STRATEGY1_INITIAL_FEE );
351357 uint256 strategyId2 = proxiedManager.createStrategy (100 );
352358 erc20mock.approve (address (proxiedManager), 200_000 );
353359 proxiedManager.depositERC20 (strategyId, erc20mock, 100_000 );
@@ -373,7 +379,7 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
373379
374380 function testCreateStrategyAndSingleDepositAndSingleWithdrawal () public {
375381 vm.startPrank (USER1);
376- uint256 strategyId = proxiedManager.createStrategy (1 );
382+ uint256 strategyId = proxiedManager.createStrategy (STRATEGY1_INITIAL_FEE );
377383 erc20mock.approve (address (proxiedManager), 200_000 );
378384 proxiedManager.depositERC20 (strategyId, erc20mock, 100_000 );
379385
@@ -394,7 +400,7 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
394400
395401 function testCreateStrategyAndSingleDepositAndMultipleFastWithdrawals () public {
396402 vm.startPrank (USER1);
397- uint256 strategyId = proxiedManager.createStrategy (1 );
403+ uint256 strategyId = proxiedManager.createStrategy (STRATEGY1_INITIAL_FEE );
398404 erc20mock.approve (address (proxiedManager), 200_000 );
399405 proxiedManager.depositERC20 (strategyId, erc20mock, 100_000 );
400406 assertEq (
@@ -422,12 +428,12 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
422428 address [] memory tokensInput = new address [](1 );
423429 tokensInput[0 ] = address (erc20mock);
424430 uint32 [] memory obligationPercentagesInput = new uint32 [](1 );
425- obligationPercentagesInput[0 ] = 10_000 ; // 100 %
431+ obligationPercentagesInput[0 ] = 9000 ; // 90 %
426432 proxiedManager.optInToService (1 , SERVICE1, tokensInput, obligationPercentagesInput);
427433 uint256 strategyId = proxiedManager.accountServiceStrategy (USER1, SERVICE1);
428434 assertEq (strategyId, 1 , "Strategy id " );
429435 uint256 obligationPercentage = proxiedManager.obligations (strategyId, SERVICE1, address (erc20mock));
430- assertEq (obligationPercentage, 10_000 , "Obligation percentage " );
436+ assertEq (obligationPercentage, 9000 , "Obligation percentage " );
431437 uint256 usedTokens = proxiedManager.usedTokens (strategyId, address (erc20mock));
432438 assertEq (usedTokens, 1 , "Used tokens " );
433439 uint32 numberOfObligations = proxiedManager.obligationsCounter (strategyId, SERVICE1);
@@ -623,7 +629,119 @@ contract BasedAppManagerTest is Test, OwnableUpgradeable {
623629 vm.stopPrank ();
624630 }
625631
626- function testUpdateStrategy () public {}
632+ function testFastUpdateObligation () public {
633+ testStrategyOptInToService ();
634+ vm.startPrank (USER1);
635+ uint32 strategyId = 1 ;
636+ proxiedManager.fastUpdateObligation (strategyId, SERVICE1, address (erc20mock), 10_000 );
637+ uint256 obligationPercentage = proxiedManager.obligations (strategyId, SERVICE1, address (erc20mock));
638+ assertEq (obligationPercentage, 10_000 , "Obligation percentage " );
639+ uint256 usedTokens = proxiedManager.usedTokens (strategyId, address (erc20mock));
640+ assertEq (usedTokens, 1 , "Used tokens " );
641+ uint32 numberOfObligations = proxiedManager.obligationsCounter (strategyId, SERVICE1);
642+ assertEq (numberOfObligations, 1 , "Number of obligations " );
643+ vm.stopPrank ();
644+ }
645+
646+ function testStrategyFeeUpdateOnInitialLimit () public {
647+ testStrategyOptInToService ();
648+ vm.startPrank (USER1);
649+ proxiedManager.proposeFeeUpdate (STRATEGY1, 20 );
650+ (address owner , uint32 fee , uint32 feeProposed , uint256 feeUpdateTime ) = proxiedManager.strategies (STRATEGY1);
651+ assertEq (owner, USER1, "Strategy owner " );
652+ assertEq (fee, STRATEGY1_INITIAL_FEE, "Strategy fee " );
653+ assertEq (feeProposed, 20 , "Strategy fee proposed " );
654+ assertEq (feeUpdateTime, 604_801 , "Strategy fee update time " );
655+ vm.warp (block .timestamp + 7 days);
656+ proxiedManager.finalizeFeeUpdate (STRATEGY1);
657+ (owner, fee, feeProposed, feeUpdateTime) = proxiedManager.strategies (STRATEGY1);
658+ assertEq (owner, USER1, "Strategy owner " );
659+ assertEq (fee, 20 , "Strategy fee " );
660+ assertEq (feeProposed, 0 , "Strategy fee proposed " );
661+ assertEq (feeUpdateTime, 0 , "Strategy fee update time " );
662+ vm.stopPrank ();
663+ }
664+
665+ function testStrategyFeeUpdateOnFinalTimeLimit () public {
666+ testStrategyOptInToService ();
667+ vm.startPrank (USER1);
668+ proxiedManager.proposeFeeUpdate (STRATEGY1, 20 );
669+ (address owner , uint32 fee , uint32 feeProposed , uint256 feeUpdateTime ) = proxiedManager.strategies (STRATEGY1);
670+ assertEq (owner, USER1, "Strategy owner " );
671+ assertEq (fee, STRATEGY1_INITIAL_FEE, "Strategy fee " );
672+ assertEq (feeProposed, 20 , "Strategy fee proposed " );
673+ assertEq (feeUpdateTime, 604_801 , "Strategy fee update time " );
674+ vm.warp (block .timestamp + 7 days + 1 days);
675+ proxiedManager.finalizeFeeUpdate (STRATEGY1);
676+ (owner, fee, feeProposed, feeUpdateTime) = proxiedManager.strategies (STRATEGY1);
677+ assertEq (owner, USER1, "Strategy owner " );
678+ assertEq (fee, 20 , "Strategy fee " );
679+ assertEq (feeProposed, 0 , "Strategy fee proposed " );
680+ assertEq (feeUpdateTime, 0 , "Strategy fee update time " );
681+ vm.stopPrank ();
682+ }
683+
684+ function testStrategyFeeUpdateTooLate () public {
685+ testStrategyOptInToService ();
686+ vm.startPrank (USER1);
687+ proxiedManager.proposeFeeUpdate (STRATEGY1, 20 );
688+ (address owner , uint32 fee , uint32 feeProposed , uint256 feeUpdateTime ) = proxiedManager.strategies (STRATEGY1);
689+ assertEq (owner, USER1, "Strategy owner " );
690+ assertEq (fee, STRATEGY1_INITIAL_FEE, "Strategy fee " );
691+ assertEq (feeProposed, 20 , "Strategy fee proposed " );
692+ assertEq (feeUpdateTime, 604_801 , "Strategy fee update time " );
693+ vm.warp (block .timestamp + 7 days + 1 days + 1 seconds);
694+ vm.expectRevert ("Fee update expired " );
695+ proxiedManager.finalizeFeeUpdate (STRATEGY1);
696+ (owner, fee, feeProposed, feeUpdateTime) = proxiedManager.strategies (STRATEGY1);
697+ assertEq (owner, USER1, "Strategy owner " );
698+ assertEq (fee, STRATEGY1_INITIAL_FEE, "Strategy fee " );
699+ assertEq (feeProposed, 20 , "Strategy fee proposed " );
700+ assertEq (feeUpdateTime, 604_801 , "Strategy fee update time " );
701+ vm.stopPrank ();
702+ }
703+
704+ function testStrategyFeeUpdateTooEarly () public {
705+ testStrategyOptInToService ();
706+ vm.startPrank (USER1);
707+ proxiedManager.proposeFeeUpdate (STRATEGY1, 20 );
708+ (address owner , uint32 fee , uint32 feeProposed , uint256 feeUpdateTime ) = proxiedManager.strategies (STRATEGY1);
709+ assertEq (owner, USER1, "Strategy owner " );
710+ assertEq (fee, STRATEGY1_INITIAL_FEE, "Strategy fee " );
711+ assertEq (feeProposed, 20 , "Strategy fee proposed " );
712+ assertEq (feeUpdateTime, 604_801 , "Strategy fee update time " );
713+ vm.warp (block .timestamp + 7 days - 1 seconds);
714+ vm.expectRevert ("Timelock not passed " );
715+ proxiedManager.finalizeFeeUpdate (STRATEGY1);
716+ (owner, fee, feeProposed, feeUpdateTime) = proxiedManager.strategies (STRATEGY1);
717+ assertEq (owner, USER1, "Strategy owner " );
718+ assertEq (fee, STRATEGY1_INITIAL_FEE, "Strategy fee " );
719+ assertEq (feeProposed, 20 , "Strategy fee proposed " );
720+ assertEq (feeUpdateTime, 604_801 , "Strategy fee update time " );
721+ vm.stopPrank ();
722+ }
723+
724+ function testUpdateStrategyObligationFinalize () public {
725+ testStrategyOptInToService ();
726+ vm.startPrank (USER1);
727+ proxiedManager.proposeUpdateObligation (STRATEGY1, SERVICE1, address (erc20mock), 1000 );
728+ (uint32 percentage , uint256 requestTime ) =
729+ proxiedManager.obligationRequests (STRATEGY1, SERVICE1, address (erc20mock));
730+ uint32 oldPercentage = proxiedManager.obligations (STRATEGY1, SERVICE1, address (erc20mock));
731+ assertEq (oldPercentage, 9000 , "Obligation percentage proposed " );
732+ assertEq (percentage, 1000 , "Obligation percentage proposed " );
733+ assertEq (requestTime, 1 , "Obligation update time " );
734+ vm.warp (block .timestamp + 7 days);
735+ proxiedManager.finalizeUpdateObligation (STRATEGY1, SERVICE1, address (erc20mock));
736+ (percentage, requestTime) = proxiedManager.obligationRequests (STRATEGY1, SERVICE1, address (erc20mock));
737+ assertEq (percentage, 1000 , "Obligation percentage proposed " );
738+ assertEq (requestTime, 1 , "Obligation update time " );
739+ uint32 newPercentage = proxiedManager.obligations (STRATEGY1, SERVICE1, address (erc20mock));
740+ assertEq (newPercentage, 1000 , "Obligation new percentage " );
741+ vm.stopPrank ();
742+ }
743+
744+ // todo check update removal obligation
627745
628746 // ********************
629747 // ** Section: bApps **
0 commit comments