125 lines
4.1 KiB
Go
125 lines
4.1 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
|
govtestutil "github.com/cosmos/cosmos-sdk/x/gov/testutil"
|
|
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
|
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
|
"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
|
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
|
)
|
|
|
|
type KeeperTestSuite struct {
|
|
suite.Suite
|
|
|
|
cdc codec.Codec
|
|
ctx sdk.Context
|
|
govKeeper *keeper.Keeper
|
|
acctKeeper *govtestutil.MockAccountKeeper
|
|
bankKeeper *govtestutil.MockBankKeeper
|
|
stakingKeeper *govtestutil.MockStakingKeeper
|
|
queryClient v1.QueryClient
|
|
legacyQueryClient v1beta1.QueryClient
|
|
addrs []sdk.AccAddress
|
|
msgSrvr v1.MsgServer
|
|
legacyMsgSrvr v1beta1.MsgServer
|
|
}
|
|
|
|
func (suite *KeeperTestSuite) SetupSuite() {
|
|
suite.reset()
|
|
}
|
|
|
|
func (suite *KeeperTestSuite) reset() {
|
|
govKeeper, acctKeeper, bankKeeper, stakingKeeper, encCfg, ctx := setupGovKeeper(suite.T())
|
|
|
|
// Populate the gov account with some coins, as the TestProposal we have
|
|
// is a MsgSend from the gov account.
|
|
coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100000)))
|
|
err := bankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)
|
|
suite.NoError(err)
|
|
err = bankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.ModuleName, coins)
|
|
suite.NoError(err)
|
|
|
|
queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry)
|
|
v1.RegisterQueryServer(queryHelper, govKeeper)
|
|
legacyQueryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry)
|
|
v1beta1.RegisterQueryServer(legacyQueryHelper, keeper.NewLegacyQueryServer(govKeeper))
|
|
queryClient := v1.NewQueryClient(queryHelper)
|
|
legacyQueryClient := v1beta1.NewQueryClient(legacyQueryHelper)
|
|
|
|
suite.ctx = ctx
|
|
suite.govKeeper = govKeeper
|
|
suite.acctKeeper = acctKeeper
|
|
suite.bankKeeper = bankKeeper
|
|
suite.stakingKeeper = stakingKeeper
|
|
suite.cdc = encCfg.Codec
|
|
suite.queryClient = queryClient
|
|
suite.legacyQueryClient = legacyQueryClient
|
|
suite.msgSrvr = keeper.NewMsgServerImpl(suite.govKeeper)
|
|
|
|
suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govAcct.String(), suite.msgSrvr)
|
|
suite.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdk.NewInt(30000000))
|
|
}
|
|
|
|
func TestIncrementProposalNumber(t *testing.T) {
|
|
govKeeper, _, _, _, _, ctx := setupGovKeeper(t)
|
|
|
|
tp := TestProposal
|
|
_, err := govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
proposal6, err := govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, uint64(6), proposal6.Id)
|
|
}
|
|
|
|
func TestProposalQueues(t *testing.T) {
|
|
govKeeper, _, _, _, _, ctx := setupGovKeeper(t)
|
|
|
|
// create test proposals
|
|
tp := TestProposal
|
|
proposal, err := govKeeper.SubmitProposal(ctx, tp, "")
|
|
require.NoError(t, err)
|
|
|
|
inactiveIterator := govKeeper.InactiveProposalQueueIterator(ctx, *proposal.DepositEndTime)
|
|
require.True(t, inactiveIterator.Valid())
|
|
|
|
proposalID := types.GetProposalIDFromBytes(inactiveIterator.Value())
|
|
require.Equal(t, proposalID, proposal.Id)
|
|
inactiveIterator.Close()
|
|
|
|
govKeeper.ActivateVotingPeriod(ctx, proposal)
|
|
|
|
proposal, ok := govKeeper.GetProposal(ctx, proposal.Id)
|
|
require.True(t, ok)
|
|
|
|
activeIterator := govKeeper.ActiveProposalQueueIterator(ctx, *proposal.VotingEndTime)
|
|
require.True(t, activeIterator.Valid())
|
|
|
|
proposalID, _ = types.SplitActiveProposalQueueKey(activeIterator.Key())
|
|
require.Equal(t, proposalID, proposal.Id)
|
|
|
|
activeIterator.Close()
|
|
}
|
|
|
|
func TestKeeperTestSuite(t *testing.T) {
|
|
suite.Run(t, new(KeeperTestSuite))
|
|
}
|