Co-authored-by: son trinh <trinhleson2000@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
163 lines
5.7 KiB
Go
163 lines
5.7 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
"cosmossdk.io/collections"
|
|
sdkmath "cosmossdk.io/math"
|
|
"cosmossdk.io/x/gov/keeper"
|
|
govtestutil "cosmossdk.io/x/gov/testutil"
|
|
"cosmossdk.io/x/gov/types"
|
|
v1 "cosmossdk.io/x/gov/types/v1"
|
|
"cosmossdk.io/x/gov/types/v1beta1"
|
|
|
|
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
"github.com/cosmos/cosmos-sdk/codec/address"
|
|
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
)
|
|
|
|
var address1 = "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r"
|
|
|
|
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, mocks, encCfg, ctx := setupGovKeeper(suite.T())
|
|
acctKeeper, bankKeeper, stakingKeeper := mocks.acctKeeper, mocks.bankKeeper, mocks.stakingKeeper
|
|
|
|
// 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", sdkmath.NewInt(1000000)))
|
|
err := bankKeeper.MintCoins(suite.ctx, mintModuleName, coins)
|
|
suite.NoError(err)
|
|
err = bankKeeper.SendCoinsFromModuleToModule(ctx, mintModuleName, types.ModuleName, coins)
|
|
suite.NoError(err)
|
|
|
|
queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry)
|
|
v1.RegisterQueryServer(queryHelper, keeper.NewQueryServer(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)
|
|
|
|
govStrAcct, err := suite.acctKeeper.AddressCodec().BytesToString(govAcct)
|
|
suite.Require().NoError(err)
|
|
|
|
suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govStrAcct, suite.msgSrvr)
|
|
suite.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdkmath.NewInt(300000000))
|
|
|
|
suite.acctKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
|
|
}
|
|
|
|
func TestIncrementProposalNumber(t *testing.T) {
|
|
govKeeper, mocks, _, ctx := setupGovKeeper(t)
|
|
authKeeper := mocks.acctKeeper
|
|
|
|
authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
|
|
|
|
ac := address.NewBech32Codec("cosmos")
|
|
addrBz, err := ac.StringToBytes(address1)
|
|
require.NoError(t, err)
|
|
|
|
tp := TestProposal
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_STANDARD)
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_STANDARD)
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_EXPEDITED)
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_EXPEDITED)
|
|
require.NoError(t, err)
|
|
_, err = govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_STANDARD)
|
|
require.NoError(t, err)
|
|
proposal6, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_STANDARD)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, uint64(6), proposal6.Id)
|
|
}
|
|
|
|
func TestProposalQueues(t *testing.T) {
|
|
govKeeper, mocks, _, ctx := setupGovKeeper(t)
|
|
authKeeper := mocks.acctKeeper
|
|
|
|
ac := address.NewBech32Codec("cosmos")
|
|
addrBz, err := ac.StringToBytes(address1)
|
|
require.NoError(t, err)
|
|
authKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
|
|
|
|
// create test proposals
|
|
tp := TestProposal
|
|
proposal, err := govKeeper.SubmitProposal(ctx, tp, "", "test", "summary", addrBz, v1.ProposalType_PROPOSAL_TYPE_STANDARD)
|
|
require.NoError(t, err)
|
|
|
|
has, err := govKeeper.InactiveProposalsQueue.Has(ctx, collections.Join(*proposal.DepositEndTime, proposal.Id))
|
|
require.NoError(t, err)
|
|
require.True(t, has)
|
|
|
|
require.NoError(t, govKeeper.ActivateVotingPeriod(ctx, proposal))
|
|
|
|
proposal, err = govKeeper.Proposals.Get(ctx, proposal.Id)
|
|
require.Nil(t, err)
|
|
|
|
has, err = govKeeper.ActiveProposalsQueue.Has(ctx, collections.Join(*proposal.VotingEndTime, proposal.Id))
|
|
require.NoError(t, err)
|
|
require.True(t, has)
|
|
}
|
|
|
|
func TestSetHooks(t *testing.T) {
|
|
govKeeper, _, _, _ := setupGovKeeper(t)
|
|
require.Empty(t, govKeeper.Hooks())
|
|
|
|
govHooksReceiver := MockGovHooksReceiver{}
|
|
govKeeper.SetHooks(types.NewMultiGovHooks(&govHooksReceiver))
|
|
require.NotNil(t, govKeeper.Hooks())
|
|
require.Panics(t, func() {
|
|
govKeeper.SetHooks(&govHooksReceiver)
|
|
})
|
|
}
|
|
|
|
func TestGetGovGovernanceAndModuleAccountAddress(t *testing.T) {
|
|
govKeeper, mocks, _, ctx := setupGovKeeper(t)
|
|
authKeeper := mocks.acctKeeper
|
|
mAcc := authKeeper.GetModuleAccount(ctx, "gov")
|
|
require.Equal(t, mAcc, govKeeper.GetGovernanceAccount(ctx))
|
|
mAddr := authKeeper.GetModuleAddress("gov")
|
|
require.Equal(t, mAddr, govKeeper.ModuleAccountAddress())
|
|
}
|
|
|
|
func TestKeeperTestSuite(t *testing.T) {
|
|
suite.Run(t, new(KeeperTestSuite))
|
|
}
|