github.com/cosmos/cosmos-sdk@v0.50.10/x/gov/keeper/keeper_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 "github.com/stretchr/testify/suite" 8 9 "cosmossdk.io/collections" 10 sdkmath "cosmossdk.io/math" 11 12 "github.com/cosmos/cosmos-sdk/baseapp" 13 "github.com/cosmos/cosmos-sdk/codec" 14 "github.com/cosmos/cosmos-sdk/codec/address" 15 simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" 16 sdk "github.com/cosmos/cosmos-sdk/types" 17 "github.com/cosmos/cosmos-sdk/x/gov/keeper" 18 govtestutil "github.com/cosmos/cosmos-sdk/x/gov/testutil" 19 "github.com/cosmos/cosmos-sdk/x/gov/types" 20 v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" 21 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" 22 minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" 23 ) 24 25 var address1 = "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r" 26 27 type KeeperTestSuite struct { 28 suite.Suite 29 30 cdc codec.Codec 31 ctx sdk.Context 32 govKeeper *keeper.Keeper 33 acctKeeper *govtestutil.MockAccountKeeper 34 bankKeeper *govtestutil.MockBankKeeper 35 stakingKeeper *govtestutil.MockStakingKeeper 36 distKeeper *govtestutil.MockDistributionKeeper 37 queryClient v1.QueryClient 38 legacyQueryClient v1beta1.QueryClient 39 addrs []sdk.AccAddress 40 msgSrvr v1.MsgServer 41 legacyMsgSrvr v1beta1.MsgServer 42 } 43 44 func (suite *KeeperTestSuite) SetupSuite() { 45 suite.reset() 46 } 47 48 func (suite *KeeperTestSuite) reset() { 49 govKeeper, acctKeeper, bankKeeper, stakingKeeper, distKeeper, encCfg, ctx := setupGovKeeper(suite.T()) 50 51 // Populate the gov account with some coins, as the TestProposal we have 52 // is a MsgSend from the gov account. 53 coins := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100000))) 54 err := bankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins) 55 suite.NoError(err) 56 err = bankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.ModuleName, coins) 57 suite.NoError(err) 58 59 queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) 60 v1.RegisterQueryServer(queryHelper, keeper.NewQueryServer(govKeeper)) 61 legacyQueryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry) 62 v1beta1.RegisterQueryServer(legacyQueryHelper, keeper.NewLegacyQueryServer(govKeeper)) 63 queryClient := v1.NewQueryClient(queryHelper) 64 legacyQueryClient := v1beta1.NewQueryClient(legacyQueryHelper) 65 66 suite.ctx = ctx 67 suite.govKeeper = govKeeper 68 suite.acctKeeper = acctKeeper 69 suite.bankKeeper = bankKeeper 70 suite.stakingKeeper = stakingKeeper 71 suite.distKeeper = distKeeper 72 suite.cdc = encCfg.Codec 73 suite.queryClient = queryClient 74 suite.legacyQueryClient = legacyQueryClient 75 suite.msgSrvr = keeper.NewMsgServerImpl(suite.govKeeper) 76 77 suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govAcct.String(), suite.msgSrvr) 78 suite.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdkmath.NewInt(30000000)) 79 80 suite.acctKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() 81 } 82 83 func TestIncrementProposalNumber(t *testing.T) { 84 govKeeper, authKeeper, _, _, _, _, ctx := setupGovKeeper(t) 85 86 authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() 87 88 ac := address.NewBech32Codec("cosmos") 89 addrBz, err := ac.StringToBytes(address1) 90 require.NoError(t, err) 91 92 tp := TestProposal 93 _, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false) 94 require.NoError(t, err) 95 _, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false) 96 require.NoError(t, err) 97 _, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, true) 98 require.NoError(t, err) 99 _, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, true) 100 require.NoError(t, err) 101 _, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false) 102 require.NoError(t, err) 103 proposal6, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false) 104 require.NoError(t, err) 105 106 require.Equal(t, uint64(6), proposal6.Id) 107 } 108 109 func TestProposalQueues(t *testing.T) { 110 govKeeper, authKeeper, _, _, _, _, ctx := setupGovKeeper(t) 111 112 ac := address.NewBech32Codec("cosmos") 113 addrBz, err := ac.StringToBytes(address1) 114 require.NoError(t, err) 115 authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() 116 117 // create test proposals 118 tp := TestProposal 119 proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, false) 120 require.NoError(t, err) 121 122 has, err := govKeeper.InactiveProposalsQueue.Has(ctx, collections.Join(*proposal.DepositEndTime, proposal.Id)) 123 require.NoError(t, err) 124 require.True(t, has) 125 126 require.NoError(t, govKeeper.ActivateVotingPeriod(ctx, proposal)) 127 128 proposal, err = govKeeper.Proposals.Get(ctx, proposal.Id) 129 require.Nil(t, err) 130 131 has, err = govKeeper.ActiveProposalsQueue.Has(ctx, collections.Join(*proposal.VotingEndTime, proposal.Id)) 132 require.NoError(t, err) 133 require.True(t, has) 134 } 135 136 func TestSetHooks(t *testing.T) { 137 govKeeper, _, _, _, _, _, _ := setupGovKeeper(t) 138 require.Empty(t, govKeeper.Hooks()) 139 140 govHooksReceiver := MockGovHooksReceiver{} 141 govKeeper.SetHooks(types.NewMultiGovHooks(&govHooksReceiver)) 142 require.NotNil(t, govKeeper.Hooks()) 143 require.Panics(t, func() { 144 govKeeper.SetHooks(&govHooksReceiver) 145 }) 146 } 147 148 func TestGetGovGovernanceAndModuleAccountAddress(t *testing.T) { 149 govKeeper, authKeeper, _, _, _, _, ctx := setupGovKeeper(t) 150 mAcc := authKeeper.GetModuleAccount(ctx, "gov") 151 require.Equal(t, mAcc, govKeeper.GetGovernanceAccount(ctx)) 152 mAddr := authKeeper.GetModuleAddress("gov") 153 require.Equal(t, mAddr, govKeeper.ModuleAccountAddress()) 154 } 155 156 func TestKeeperTestSuite(t *testing.T) { 157 suite.Run(t, new(KeeperTestSuite)) 158 }