cosmos-sdk/x/gov/keeper/keeper_test.go
Julián Toledano 160c41842e
refactor(x/gov)!: remove Accounts.String() (#19850)
Co-authored-by: son trinh <trinhleson2000@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-03-26 10:29:47 +00:00

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))
}