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  }