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  }