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  }