github.com/Finschia/finschia-sdk@v0.48.1/x/gov/keeper/hooks_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/require" 8 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 9 10 "github.com/Finschia/finschia-sdk/simapp" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 "github.com/Finschia/finschia-sdk/x/gov" 13 "github.com/Finschia/finschia-sdk/x/gov/keeper" 14 "github.com/Finschia/finschia-sdk/x/gov/types" 15 ) 16 17 var _ types.GovHooks = &MockGovHooksReceiver{} 18 19 // GovHooks event hooks for governance proposal object (noalias) 20 type MockGovHooksReceiver struct { 21 AfterProposalSubmissionValid bool 22 AfterProposalDepositValid bool 23 AfterProposalVoteValid bool 24 AfterProposalFailedMinDepositValid bool 25 AfterProposalVotingPeriodEndedValid bool 26 } 27 28 func (h *MockGovHooksReceiver) AfterProposalSubmission(ctx sdk.Context, proposalID uint64) { 29 h.AfterProposalSubmissionValid = true 30 } 31 32 func (h *MockGovHooksReceiver) AfterProposalDeposit(ctx sdk.Context, proposalID uint64, depositorAddr sdk.AccAddress) { 33 h.AfterProposalDepositValid = true 34 } 35 36 func (h *MockGovHooksReceiver) AfterProposalVote(ctx sdk.Context, proposalID uint64, voterAddr sdk.AccAddress) { 37 h.AfterProposalVoteValid = true 38 } 39 40 func (h *MockGovHooksReceiver) AfterProposalFailedMinDeposit(ctx sdk.Context, proposalID uint64) { 41 h.AfterProposalFailedMinDepositValid = true 42 } 43 44 func (h *MockGovHooksReceiver) AfterProposalVotingPeriodEnded(ctx sdk.Context, proposalID uint64) { 45 h.AfterProposalVotingPeriodEndedValid = true 46 } 47 48 func TestHooks(t *testing.T) { 49 app := simapp.Setup(false) 50 ctx := app.BaseApp.NewContext(false, tmproto.Header{}) 51 52 minDeposit := app.GovKeeper.GetDepositParams(ctx).MinDeposit 53 addrs := simapp.AddTestAddrs(app, ctx, 1, minDeposit[0].Amount) 54 55 govHooksReceiver := MockGovHooksReceiver{} 56 57 keeper.UnsafeSetHooks( 58 &app.GovKeeper, types.NewMultiGovHooks(&govHooksReceiver), 59 ) 60 61 require.False(t, govHooksReceiver.AfterProposalSubmissionValid) 62 require.False(t, govHooksReceiver.AfterProposalDepositValid) 63 require.False(t, govHooksReceiver.AfterProposalVoteValid) 64 require.False(t, govHooksReceiver.AfterProposalFailedMinDepositValid) 65 require.False(t, govHooksReceiver.AfterProposalVotingPeriodEndedValid) 66 67 tp := TestProposal 68 _, err := app.GovKeeper.SubmitProposal(ctx, tp) 69 require.NoError(t, err) 70 require.True(t, govHooksReceiver.AfterProposalSubmissionValid) 71 72 newHeader := ctx.BlockHeader() 73 newHeader.Time = ctx.BlockHeader().Time.Add(app.GovKeeper.GetDepositParams(ctx).MaxDepositPeriod).Add(time.Duration(1) * time.Second) 74 ctx = ctx.WithBlockHeader(newHeader) 75 gov.EndBlocker(ctx, app.GovKeeper) 76 77 require.True(t, govHooksReceiver.AfterProposalFailedMinDepositValid) 78 79 p2, err := app.GovKeeper.SubmitProposal(ctx, tp) 80 require.NoError(t, err) 81 82 activated, err := app.GovKeeper.AddDeposit(ctx, p2.ProposalId, addrs[0], minDeposit) 83 require.True(t, activated) 84 require.NoError(t, err) 85 require.True(t, govHooksReceiver.AfterProposalDepositValid) 86 87 err = app.GovKeeper.AddVote(ctx, p2.ProposalId, addrs[0], types.NewNonSplitVoteOption(types.OptionYes)) 88 require.NoError(t, err) 89 require.True(t, govHooksReceiver.AfterProposalVoteValid) 90 91 newHeader = ctx.BlockHeader() 92 newHeader.Time = ctx.BlockHeader().Time.Add(app.GovKeeper.GetVotingParams(ctx).VotingPeriod).Add(time.Duration(1) * time.Second) 93 ctx = ctx.WithBlockHeader(newHeader) 94 gov.EndBlocker(ctx, app.GovKeeper) 95 require.True(t, govHooksReceiver.AfterProposalVotingPeriodEndedValid) 96 }