github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/keeper/hooks_distr_proposal_test.go (about) 1 package keeper 2 3 import ( 4 "testing" 5 "time" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 9 "github.com/fibonacci-chain/fbc/x/staking" 10 11 "github.com/fibonacci-chain/fbc/x/distribution/types" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestHooksBeforeDelegationSharesModified(t *testing.T) { 16 communityTax := sdk.NewDecWithPrec(2, 2) 17 ctx, _, _, dk, sk, _, _ := CreateTestInputAdvanced(t, false, 1000, communityTax) 18 19 tmtypes.UnittestOnlySetMilestoneVenus2Height(-1) 20 dk.SetDistributionType(ctx, types.DistributionTypeOnChain) 21 dk.SetInitExistedValidatorFlag(ctx, true) 22 23 // create validator 24 DoCreateValidator(t, ctx, sk, valOpAddr1, valConsPk1) 25 //change val commission 26 newRate, _ := sdk.NewDecFromStr("0.5") 27 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 28 DoEditValidator(t, ctx, sk, valOpAddr1, newRate) 29 hook := dk.Hooks() 30 31 // test BeforeDelegationSharesModified 32 DoDeposit(t, ctx, sk, delAddr1, sdk.NewCoin(sk.BondDenom(ctx), sdk.NewInt(100))) 33 require.Equal(t, uint64(1), dk.GetValidatorHistoricalReferenceCount(ctx)) 34 valOpAddrs := []sdk.ValAddress{valOpAddr1} 35 DoAddShares(t, ctx, sk, delAddr1, valOpAddrs) 36 37 //test BeforeDelegationSharesModified no support 38 dk.SetInitExistedValidatorFlag(ctx, false) 39 hook.BeforeDelegationSharesModified(ctx, delAddr1, valOpAddrs) 40 periodBefore := dk.GetDelegatorStartingInfo(ctx, valOpAddr1, delAddr1) 41 require.Equal(t, periodBefore.PreviousPeriod, uint64(1)) 42 dk.SetInitExistedValidatorFlag(ctx, true) 43 hook.BeforeDelegationSharesModified(ctx, delAddr1, valOpAddrs) 44 //will delete it 45 require.False(t, dk.HasDelegatorStartingInfo(ctx, valOpAddr1, delAddr1)) 46 47 } 48 49 func TestHooksAfterValidatorRemoved(t *testing.T) { 50 communityTax := sdk.NewDecWithPrec(2, 2) 51 ctx, ak, _, dk, sk, _, supplyKeeper := CreateTestInputAdvanced(t, false, 1000, communityTax) 52 tmtypes.UnittestOnlySetMilestoneVenus2Height(-1) 53 dk.SetDistributionType(ctx, types.DistributionTypeOnChain) 54 dk.SetInitExistedValidatorFlag(ctx, true) 55 56 // create validator 57 DoCreateValidator(t, ctx, sk, valOpAddr1, valConsPk1) 58 //change val commission 59 newRate, _ := sdk.NewDecFromStr("0.5") 60 ctx.SetBlockTime(time.Now().UTC().Add(48 * time.Hour)) 61 DoEditValidator(t, ctx, sk, valOpAddr1, newRate) 62 63 // end block to bond validator 64 staking.EndBlocker(ctx, sk) 65 66 // next block 67 ctx.SetBlockHeight(ctx.BlockHeight() + 1) 68 69 hook := dk.Hooks() 70 71 // test AfterValidatorCreated 72 hook.AfterValidatorCreated(ctx, valOpAddr1) 73 require.True(t, dk.GetValidatorAccumulatedCommission(ctx, valOpAddr1).IsZero()) 74 75 // test AfterValidatorRemoved 76 acc := ak.GetAccount(ctx, supplyKeeper.GetModuleAddress(types.ModuleName)) 77 err := acc.SetCoins(NewTestSysCoins(123, 2)) 78 require.NoError(t, err) 79 ak.SetAccount(ctx, acc) 80 dk.SetValidatorAccumulatedCommission(ctx, valOpAddr1, NewTestSysCoins(123, 2)) 81 dk.SetValidatorOutstandingRewards(ctx, valOpAddr1, NewTestSysCoins(123, 2)) 82 hook.AfterValidatorRemoved(ctx, nil, valOpAddr1) 83 require.True(t, ctx.KVStore(dk.storeKey).Get(valOpAddr1) == nil) 84 85 // test to promote the coverage 86 hook.AfterValidatorDestroyed(ctx, valConsAddr1, valOpAddr1) 87 hook.BeforeValidatorModified(ctx, valOpAddr1) 88 hook.AfterValidatorBonded(ctx, valConsAddr1, valOpAddr1) 89 hook.AfterValidatorBeginUnbonding(ctx, valConsAddr1, valOpAddr1) 90 hook.BeforeDelegationRemoved(ctx, valAccAddr1, valOpAddr1) 91 }