use super::*;
use frame_support::assert_ok;
#[test]
fn legacy_era_payout_and_mint_works() {
ExtBuilder::default().legacy_reward_mode().build_and_execute(|| {
let era_duration = time_per_era();
let total = era_duration as Balance;
let expected_remainder = RemainderRatio::get() * total;
let expected_stakers = total - expected_remainder;
Staking::reward_by_ids(vec![(11, 1)]);
RewardRemainderUnbalanced::set(0);
Session::roll_until_active_era(2);
assert!(staking_events_since_last_call().contains(&Event::EraPaid {
era_index: 1,
validator_payout: expected_stakers,
remainder: expected_remainder,
}));
assert_eq!(ErasValidatorReward::<Test>::get(1).unwrap(), expected_stakers);
assert_eq!(RewardRemainderUnbalanced::get(), expected_remainder);
assert!(!crate::reward::EraRewardManager::<Test>::has_staker_rewards_pot(1));
assert_eq!(DisableMintingGuard::<Test>::get(), None);
let pre_payout_issuance = pallet_balances::TotalIssuance::<Test>::get();
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 1));
assert!(pallet_balances::TotalIssuance::<Test>::get() > pre_payout_issuance);
});
}
#[test]
fn legacy_max_staked_rewards_caps_staker_payout() {
ExtBuilder::default().legacy_reward_mode().build_and_execute(|| {
MaxStakedRewards::<Test>::set(Some(Percent::from_percent(10)));
Staking::reward_by_ids(vec![(11, 1)]);
Session::roll_until_active_era(2);
let total = time_per_era() as Balance;
let expected_stakers = Percent::from_percent(10) * total;
let expected_remainder = total - expected_stakers;
assert!(staking_events_since_last_call().contains(&Event::EraPaid {
era_index: 1,
validator_payout: expected_stakers,
remainder: expected_remainder,
}));
assert_eq!(ErasValidatorReward::<Test>::get(1).unwrap(), expected_stakers);
});
}
#[test]
fn legacy_max_era_duration_caps_payout() {
ExtBuilder::default().legacy_reward_mode().build_and_execute(|| {
let half = time_per_era() / 2;
MaxEraDuration::set(half);
Session::roll_until_active_era(2);
let capped_total = half as Balance;
let expected_remainder = RemainderRatio::get() * capped_total;
let expected_stakers = capped_total - expected_remainder;
let events = staking_events_since_last_call();
assert!(events.contains(&Event::Unexpected(UnexpectedKind::EraDurationBoundExceeded)));
assert!(events.contains(&Event::EraPaid {
era_index: 1,
validator_payout: expected_stakers,
remainder: expected_remainder,
}));
});
}
#[test]
fn legacy_guard_stays_unset_across_eras() {
ExtBuilder::default().legacy_reward_mode().build_and_execute(|| {
assert_eq!(DisableMintingGuard::<Test>::get(), None);
Session::roll_until_active_era(5);
assert_eq!(DisableMintingGuard::<Test>::get(), None);
});
}
#[test]
fn legacy_to_dap_migration_flow() {
ExtBuilder::default().legacy_reward_mode().build_and_execute(|| {
Staking::reward_by_ids(vec![(11, 1)]);
Session::roll_until_active_era(2);
let legacy_era = 1;
assert_eq!(DisableMintingGuard::<Test>::get(), None);
assert!(!crate::reward::EraRewardManager::<Test>::has_staker_rewards_pot(legacy_era));
assert!(ErasValidatorReward::<Test>::get(legacy_era).unwrap() > 0);
UseLegacyEraPayout::set(false);
setup_dap();
Staking::reward_by_ids(vec![(11, 1)]);
Session::roll_until_active_era(3);
let dap_era = 2;
assert!(DisableMintingGuard::<Test>::get().is_some());
assert!(crate::reward::EraRewardManager::<Test>::has_staker_rewards_pot(dap_era));
let pre_legacy_issuance = pallet_balances::TotalIssuance::<Test>::get();
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, legacy_era));
assert!(pallet_balances::TotalIssuance::<Test>::get() > pre_legacy_issuance);
let pre_issuance = pallet_balances::TotalIssuance::<Test>::get();
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, dap_era));
assert_eq!(pallet_balances::TotalIssuance::<Test>::get(), pre_issuance);
});
}