github.com/cosmos/cosmos-sdk@v0.50.10/x/gov/keeper/hooks_test.go (about) 1 package keeper_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/cosmos/cosmos-sdk/codec/address" 11 simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" 12 sdk "github.com/cosmos/cosmos-sdk/types" 13 "github.com/cosmos/cosmos-sdk/x/gov" 14 "github.com/cosmos/cosmos-sdk/x/gov/keeper" 15 "github.com/cosmos/cosmos-sdk/x/gov/types" 16 v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" 17 ) 18 19 var _ types.GovHooks = &MockGovHooksReceiver{} 20 21 // GovHooks event hooks for governance proposal object (noalias) 22 type MockGovHooksReceiver struct { 23 AfterProposalSubmissionValid bool 24 AfterProposalDepositValid bool 25 AfterProposalVoteValid bool 26 AfterProposalFailedMinDepositValid bool 27 AfterProposalVotingPeriodEndedValid bool 28 } 29 30 func (h *MockGovHooksReceiver) AfterProposalSubmission(ctx context.Context, proposalID uint64) error { 31 h.AfterProposalSubmissionValid = true 32 return nil 33 } 34 35 func (h *MockGovHooksReceiver) AfterProposalDeposit(ctx context.Context, proposalID uint64, depositorAddr sdk.AccAddress) error { 36 h.AfterProposalDepositValid = true 37 return nil 38 } 39 40 func (h *MockGovHooksReceiver) AfterProposalVote(ctx context.Context, proposalID uint64, voterAddr sdk.AccAddress) error { 41 h.AfterProposalVoteValid = true 42 return nil 43 } 44 45 func (h *MockGovHooksReceiver) AfterProposalFailedMinDeposit(ctx context.Context, proposalID uint64) error { 46 h.AfterProposalFailedMinDepositValid = true 47 return nil 48 } 49 50 func (h *MockGovHooksReceiver) AfterProposalVotingPeriodEnded(ctx context.Context, proposalID uint64) error { 51 h.AfterProposalVotingPeriodEndedValid = true 52 return nil 53 } 54 55 func TestHooks(t *testing.T) { 56 minDeposit := v1.DefaultParams().MinDeposit 57 govKeeper, authKeeper, bankKeeper, stakingKeeper, _, _, ctx := setupGovKeeper(t) 58 addrs := simtestutil.AddTestAddrs(bankKeeper, stakingKeeper, ctx, 1, minDeposit[0].Amount) 59 60 authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() 61 stakingKeeper.EXPECT().ValidatorAddressCodec().Return(address.NewBech32Codec("cosmosvaloper")).AnyTimes() 62 63 govHooksReceiver := MockGovHooksReceiver{} 64 65 keeper.UnsafeSetHooks( 66 govKeeper, types.NewMultiGovHooks(&govHooksReceiver), 67 ) 68 69 require.False(t, govHooksReceiver.AfterProposalSubmissionValid) 70 require.False(t, govHooksReceiver.AfterProposalDepositValid) 71 require.False(t, govHooksReceiver.AfterProposalVoteValid) 72 require.False(t, govHooksReceiver.AfterProposalFailedMinDepositValid) 73 require.False(t, govHooksReceiver.AfterProposalVotingPeriodEndedValid) 74 75 tp := TestProposal 76 _, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false) 77 require.NoError(t, err) 78 require.True(t, govHooksReceiver.AfterProposalSubmissionValid) 79 80 params, _ := govKeeper.Params.Get(ctx) 81 newHeader := ctx.BlockHeader() 82 newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(time.Duration(1) * time.Second) 83 ctx = ctx.WithBlockHeader(newHeader) 84 gov.EndBlocker(ctx, govKeeper) 85 86 require.True(t, govHooksReceiver.AfterProposalFailedMinDepositValid) 87 88 p2, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", sdk.AccAddress("cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"), false) 89 require.NoError(t, err) 90 91 activated, err := govKeeper.AddDeposit(ctx, p2.Id, addrs[0], minDeposit) 92 require.True(t, activated) 93 require.NoError(t, err) 94 require.True(t, govHooksReceiver.AfterProposalDepositValid) 95 96 err = govKeeper.AddVote(ctx, p2.Id, addrs[0], v1.NewNonSplitVoteOption(v1.OptionYes), "") 97 require.NoError(t, err) 98 require.True(t, govHooksReceiver.AfterProposalVoteValid) 99 100 newHeader = ctx.BlockHeader() 101 newHeader.Time = ctx.BlockHeader().Time.Add(*params.VotingPeriod).Add(time.Duration(1) * time.Second) 102 ctx = ctx.WithBlockHeader(newHeader) 103 gov.EndBlocker(ctx, govKeeper) 104 require.True(t, govHooksReceiver.AfterProposalVotingPeriodEndedValid) 105 }