@@ -11,13 +11,17 @@ use snforge_std::{
1111use staking :: constants :: {ALPHA , ALPHA_DENOMINATOR , SECONDS_IN_YEAR , STRK_IN_FRIS };
1212use staking :: errors :: {GenericError , InternalError };
1313use staking :: minting_curve :: interface :: {IMintingCurveDispatcher , IMintingCurveDispatcherTrait };
14+ use staking :: reward_supplier :: errors :: Error ;
1415use staking :: reward_supplier :: interface :: {
15- IRewardSupplier , IRewardSupplierDispatcher , IRewardSupplierDispatcherTrait ,
16- IRewardSupplierSafeDispatcher , IRewardSupplierSafeDispatcherTrait , RewardSupplierInfoV1 ,
16+ BlockDurationConfig , IRewardSupplier , IRewardSupplierConfigDispatcher ,
17+ IRewardSupplierConfigDispatcherTrait , IRewardSupplierConfigSafeDispatcher ,
18+ IRewardSupplierConfigSafeDispatcherTrait , IRewardSupplierDispatcher ,
19+ IRewardSupplierDispatcherTrait , IRewardSupplierSafeDispatcher ,
20+ IRewardSupplierSafeDispatcherTrait , RewardSupplierInfoV1 ,
1721};
1822use staking :: reward_supplier :: reward_supplier :: RewardSupplier ;
1923use staking :: reward_supplier :: reward_supplier :: RewardSupplier :: {
20- BLOCK_DURATION_SCALE , DEFAULT_AVG_BLOCK_DURATION ,
24+ BLOCK_DURATION_SCALE , DEFAULT_AVG_BLOCK_DURATION , DEFAULT_BLOCK_DURATION_CONFIG ,
2125};
2226use staking :: reward_supplier :: utils :: compute_threshold;
2327use staking :: staking :: interface :: {IStakingDispatcher , IStakingDispatcherTrait };
@@ -41,7 +45,6 @@ use test_utils::{
4145 stake_for_testing_using_dispatcher,
4246};
4347
44-
4548#[test]
4649fn test_identity () {
4750 assert! (reward_supplier_identity == ' Reward Supplier' );
@@ -534,3 +537,68 @@ fn test_update_current_epoch_block_rewards_assertions() {
534537 : result , expected_error : InternalError :: INVALID_BLOCK_TIMESTAMP . describe (),
535538 );
536539}
540+
541+ #[test]
542+ fn test_get_block_duration_config () {
543+ let mut cfg : StakingInitConfig = Default :: default ();
544+ general_contract_system_deployment (ref : cfg );
545+ let reward_supplier = cfg . staking_contract_info. reward_supplier;
546+ let reward_supplier_dispatcher = IRewardSupplierDispatcher {
547+ contract_address : reward_supplier ,
548+ };
549+ let block_duration_config = reward_supplier_dispatcher . get_block_duration_config ();
550+ assert! (block_duration_config == DEFAULT_BLOCK_DURATION_CONFIG );
551+ }
552+
553+ #[test]
554+ fn test_set_block_duration_config () {
555+ let mut cfg : StakingInitConfig = Default :: default ();
556+ general_contract_system_deployment (ref : cfg );
557+ let reward_supplier = cfg . staking_contract_info. reward_supplier;
558+ let reward_supplier_dispatcher = IRewardSupplierDispatcher {
559+ contract_address : reward_supplier ,
560+ };
561+ let reward_supplier_config_dispatcher = IRewardSupplierConfigDispatcher {
562+ contract_address : reward_supplier ,
563+ };
564+ let app_governor = cfg . test_info. app_governor;
565+ let block_duration_config = BlockDurationConfig {
566+ min_block_duration : 90 , max_block_duration : 350 ,
567+ };
568+ assert! (reward_supplier_dispatcher . get_block_duration_config () != block_duration_config );
569+ cheat_caller_address_once (contract_address : reward_supplier , caller_address : app_governor );
570+ reward_supplier_config_dispatcher . set_block_duration_config (: block_duration_config );
571+ assert! (reward_supplier_dispatcher . get_block_duration_config () == block_duration_config );
572+ }
573+
574+ #[test]
575+ #[feature(" safe_dispatcher" )]
576+ fn test_set_block_duration_config_assertions () {
577+ let mut cfg : StakingInitConfig = Default :: default ();
578+ general_contract_system_deployment (ref : cfg );
579+ let reward_supplier = cfg . staking_contract_info. reward_supplier;
580+ let reward_supplier_config_safe_dispatcher = IRewardSupplierConfigSafeDispatcher {
581+ contract_address : reward_supplier ,
582+ };
583+ let app_governor = cfg . test_info. app_governor;
584+ let mut block_duration_config = DEFAULT_BLOCK_DURATION_CONFIG ;
585+ // Catch ONLY_APP_GOVERNOR.
586+ let result = reward_supplier_config_safe_dispatcher
587+ . set_block_duration_config (: block_duration_config );
588+ assert_panic_with_error (: result , expected_error : " ONLY_APP_GOVERNOR" );
589+ // Catch INVALID_MIN_MAX_BLOCK_DURATION.
590+ block_duration_config . min_block_duration = block_duration_config . max_block_duration + 1 ;
591+ cheat_caller_address_once (contract_address : reward_supplier , caller_address : app_governor );
592+ let result = reward_supplier_config_safe_dispatcher
593+ . set_block_duration_config (: block_duration_config );
594+ assert_panic_with_error (
595+ : result , expected_error : Error :: INVALID_MIN_MAX_BLOCK_DURATION . describe (),
596+ );
597+ block_duration_config . min_block_duration = 0 ;
598+ cheat_caller_address_once (contract_address : reward_supplier , caller_address : app_governor );
599+ let result = reward_supplier_config_safe_dispatcher
600+ . set_block_duration_config (: block_duration_config );
601+ assert_panic_with_error (
602+ : result , expected_error : Error :: INVALID_MIN_MAX_BLOCK_DURATION . describe (),
603+ );
604+ }
0 commit comments