diff --git a/Makefile b/Makefile index 057fcca903..8ac5ec4e14 100644 --- a/Makefile +++ b/Makefile @@ -138,18 +138,9 @@ cosmovisor: .PHONY: build build-linux cosmovisor -mockgen_cmd=go run github.com/golang/mock/mockgen mocks: $(MOCKS_DIR) - $(mockgen_cmd) -source=client/account_retriever.go -package mocks -destination tests/mocks/account_retriever.go - $(mockgen_cmd) -package mocks -destination tests/mocks/tendermint_tm_db_DB.go github.com/tendermint/tm-db DB - $(mockgen_cmd) -source db/types.go -package mocks -destination tests/mocks/db/types.go - $(mockgen_cmd) -source=types/module/module.go -package mocks -destination tests/mocks/types_module_module.go - $(mockgen_cmd) -source=types/invariant.go -package mocks -destination tests/mocks/types_invariant.go - $(mockgen_cmd) -source=types/router.go -package mocks -destination tests/mocks/types_router.go - $(mockgen_cmd) -package mocks -destination tests/mocks/grpc_server.go github.com/gogo/protobuf/grpc Server - $(mockgen_cmd) -package mocks -destination tests/mocks/tendermint_tendermint_libs_log_DB.go github.com/tendermint/tendermint/libs/log Logger - $(mockgen_cmd) -source=orm/model/ormtable/hooks.go -package ormmocks -destination orm/testing/ormmocks/hooks.go + sh ./scripts/mockgen.sh .PHONY: mocks $(MOCKS_DIR): diff --git a/scripts/mockgen.sh b/scripts/mockgen.sh new file mode 100755 index 0000000000..15ff219d0b --- /dev/null +++ b/scripts/mockgen.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +mockgen_cmd="go run github.com/golang/mock/mockgen" +$mockgen_cmd -source=client/account_retriever.go -package mocks -destination tests/mocks/account_retriever.go +$mockgen_cmd -package mocks -destination tests/mocks/tendermint_tm_db_DB.go github.com/tendermint/tm-db DB +$mockgen_cmd -source db/types.go -package mocks -destination tests/mocks/db/types.go +$mockgen_cmd -source=types/module/module.go -package mocks -destination tests/mocks/types_module_module.go +$mockgen_cmd -source=types/invariant.go -package mocks -destination tests/mocks/types_invariant.go +$mockgen_cmd -source=types/router.go -package mocks -destination tests/mocks/types_router.go +$mockgen_cmd -package mocks -destination tests/mocks/grpc_server.go github.com/gogo/protobuf/grpc Server +$mockgen_cmd -package mocks -destination tests/mocks/tendermint_tendermint_libs_log_DB.go github.com/tendermint/tendermint/libs/log Logger +$mockgen_cmd -source=orm/model/ormtable/hooks.go -package ormmocks -destination orm/testing/ormmocks/hooks.go +$mockgen_cmd -source=x/nft/expected_keepers.go -package testutil -destination x/nft/testutil/expected_keepers_mocks.go \ No newline at end of file diff --git a/testutil/context.go b/testutil/context.go index 1addf17c28..d422dd33b6 100644 --- a/testutil/context.go +++ b/testutil/context.go @@ -1,6 +1,9 @@ package testutil import ( + "testing" + + "github.com/stretchr/testify/assert" "github.com/tendermint/tendermint/libs/log" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -24,3 +27,22 @@ func DefaultContext(key storetypes.StoreKey, tkey storetypes.StoreKey) sdk.Conte return ctx } + +type TestContext struct { + Ctx sdk.Context + DB *dbm.MemDB + CMS store.CommitMultiStore +} + +func DefaultContextWithDB(t *testing.T, key storetypes.StoreKey, tkey storetypes.StoreKey) TestContext { + db := dbm.NewMemDB() + cms := store.NewCommitMultiStore(db) + cms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, db) + cms.MountStoreWithDB(tkey, storetypes.StoreTypeTransient, db) + err := cms.LoadLatestVersion() + assert.NoError(t, err) + + ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) + + return TestContext{ctx, db, cms} +} diff --git a/x/nft/keeper/keeper_test.go b/x/nft/keeper/keeper_test.go index 61e6b74f49..b3eb892fc8 100644 --- a/x/nft/keeper/keeper_test.go +++ b/x/nft/keeper/keeper_test.go @@ -3,19 +3,20 @@ package keeper_test import ( "testing" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" tmtime "github.com/tendermint/tendermint/libs/time" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/testutil" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/x/nft" "github.com/cosmos/cosmos-sdk/x/nft/keeper" - "github.com/cosmos/cosmos-sdk/x/nft/testutil" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/nft/module" + nfttestutil "github.com/cosmos/cosmos-sdk/x/nft/testutil" ) const ( @@ -37,34 +38,32 @@ type TestSuite struct { addrs []sdk.AccAddress queryClient nft.QueryClient nftKeeper keeper.Keeper + + encCfg moduletestutil.TestEncodingConfig } func (s *TestSuite) SetupTest() { - var ( - interfaceRegistry codectypes.InterfaceRegistry - bankKeeper bankkeeper.Keeper - stakingKeeper *stakingkeeper.Keeper - nftKeeper keeper.Keeper - ) + // suite setup + s.addrs = simtestutil.CreateIncrementalAccounts(3) + s.encCfg = moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{}) - app, err := simtestutil.Setup( - testutil.AppConfig, - &interfaceRegistry, - &nftKeeper, - &bankKeeper, - &stakingKeeper, - ) - s.Require().NoError(err) + key := sdk.NewKVStoreKey(nft.StoreKey) + testCtx := testutil.DefaultContextWithDB(s.T(), key, sdk.NewTransientStoreKey("transient_test")) + ctx := testCtx.Ctx.WithBlockHeader(tmproto.Header{Time: tmtime.Now()}) - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - ctx = ctx.WithBlockHeader(tmproto.Header{Time: tmtime.Now()}) - queryHelper := baseapp.NewQueryServerTestHelper(ctx, interfaceRegistry) + // gomock initializations + ctrl := gomock.NewController(s.T()) + accountKeeper := nfttestutil.NewMockAccountKeeper(ctrl) + bankKeeper := nfttestutil.NewMockBankKeeper(ctrl) + accountKeeper.EXPECT().GetModuleAddress("nft").Return(s.addrs[0]).AnyTimes() + + nftKeeper := keeper.NewKeeper(key, s.encCfg.Codec, accountKeeper, bankKeeper) + queryHelper := baseapp.NewQueryServerTestHelper(ctx, s.encCfg.InterfaceRegistry) nft.RegisterQueryServer(queryHelper, nftKeeper) - s.ctx = ctx - s.queryClient = nft.NewQueryClient(queryHelper) - s.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdk.NewInt(30000000)) s.nftKeeper = nftKeeper + s.queryClient = nft.NewQueryClient(queryHelper) + s.ctx = ctx } func TestTestSuite(t *testing.T) { diff --git a/x/nft/module/module.go b/x/nft/module/module.go index 966e23c1d7..2532b8fab7 100644 --- a/x/nft/module/module.go +++ b/x/nft/module/module.go @@ -1,4 +1,4 @@ -package nft +package module import ( "context" diff --git a/x/nft/simulation/decoder_test.go b/x/nft/simulation/decoder_test.go index ea8c892162..c195eec311 100644 --- a/x/nft/simulation/decoder_test.go +++ b/x/nft/simulation/decoder_test.go @@ -6,15 +6,14 @@ import ( "github.com/stretchr/testify/require" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" - "github.com/cosmos/cosmos-sdk/depinject" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/kv" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/x/nft" "github.com/cosmos/cosmos-sdk/x/nft/keeper" + "github.com/cosmos/cosmos-sdk/x/nft/module" "github.com/cosmos/cosmos-sdk/x/nft/simulation" - "github.com/cosmos/cosmos-sdk/x/nft/testutil" ) var ( @@ -23,9 +22,8 @@ var ( ) func TestDecodeStore(t *testing.T) { - var cdc codec.Codec - depinject.Inject(testutil.AppConfig, &cdc) - dec := simulation.NewDecodeStore(cdc) + encCfg := moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{}) + dec := simulation.NewDecodeStore(encCfg.Codec) class := nft.Class{ Id: "ClassID", @@ -34,7 +32,7 @@ func TestDecodeStore(t *testing.T) { Description: "ClassDescription", Uri: "ClassURI", } - classBz, err := cdc.Marshal(&class) + classBz, err := encCfg.Codec.Marshal(&class) require.NoError(t, err) nft := nft.NFT{ @@ -42,7 +40,7 @@ func TestDecodeStore(t *testing.T) { Id: "NFTID", Uri: "NFTURI", } - nftBz, err := cdc.Marshal(&nft) + nftBz, err := encCfg.Codec.Marshal(&nft) require.NoError(t, err) nftOfClassByOwnerValue := []byte{0x01} diff --git a/x/nft/simulation/genesis_test.go b/x/nft/simulation/genesis_test.go index 01a5c00de0..ae47c9a960 100644 --- a/x/nft/simulation/genesis_test.go +++ b/x/nft/simulation/genesis_test.go @@ -8,25 +8,23 @@ import ( "github.com/stretchr/testify/require" sdkmath "cosmossdk.io/math" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/depinject" "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/x/nft" + nftmodule "github.com/cosmos/cosmos-sdk/x/nft/module" "github.com/cosmos/cosmos-sdk/x/nft/simulation" - "github.com/cosmos/cosmos-sdk/x/nft/testutil" ) func TestRandomizedGenState(t *testing.T) { - var cdc codec.Codec - depinject.Inject(testutil.AppConfig, &cdc) + encCfg := moduletestutil.MakeTestEncodingConfig(nftmodule.AppModuleBasic{}) s := rand.NewSource(1) r := rand.New(s) simState := module.SimulationState{ AppParams: make(simtypes.AppParams), - Cdc: cdc, + Cdc: encCfg.Codec, Rand: r, NumBonded: 3, Accounts: simtypes.RandomAccounts(r, 3), diff --git a/x/nft/simulation/operations_test.go b/x/nft/simulation/operations_test.go index e5feef0c89..61beb83eb8 100644 --- a/x/nft/simulation/operations_test.go +++ b/x/nft/simulation/operations_test.go @@ -5,72 +5,104 @@ import ( "testing" "time" - "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/runtime" + "github.com/cosmos/cosmos-sdk/testutil" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" + moduletypes "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" - authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" - bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/nft" + "github.com/cosmos/cosmos-sdk/x/nft/keeper" nftkeeper "github.com/cosmos/cosmos-sdk/x/nft/keeper" + "github.com/cosmos/cosmos-sdk/x/nft/module" "github.com/cosmos/cosmos-sdk/x/nft/simulation" - "github.com/cosmos/cosmos-sdk/x/nft/testutil" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + nfttestutil "github.com/cosmos/cosmos-sdk/x/nft/testutil" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/suite" + abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/libs/log" + tmtime "github.com/tendermint/tendermint/libs/time" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) type SimTestSuite struct { suite.Suite - ctx sdk.Context - - app *runtime.App - codec codec.Codec - interfaceRegistry codectypes.InterfaceRegistry - accountKeeper authkeeper.AccountKeeper - bankKeeper bankkeeper.Keeper - stakingKeeper *stakingkeeper.Keeper - nftKeeper nftkeeper.Keeper + ctx sdk.Context + baseApp *baseapp.BaseApp + accountKeeper *nfttestutil.MockAccountKeeper + bankKeeper *nfttestutil.MockBankKeeper + nftKeeper nftkeeper.Keeper + encCfg moduletestutil.TestEncodingConfig } func (suite *SimTestSuite) SetupTest() { - app, err := simtestutil.Setup( - testutil.AppConfig, - &suite.codec, - &suite.interfaceRegistry, - &suite.accountKeeper, - &suite.bankKeeper, - &suite.stakingKeeper, - &suite.nftKeeper, - ) - suite.Require().NoError(err) + key := sdk.NewKVStoreKey(nft.StoreKey) + // suite setup + addrs := simtestutil.CreateIncrementalAccounts(3) + suite.encCfg = moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{}) + + // gomock initializations + ctrl := gomock.NewController(suite.T()) + suite.accountKeeper = nfttestutil.NewMockAccountKeeper(ctrl) + suite.bankKeeper = nfttestutil.NewMockBankKeeper(ctrl) + + suite.accountKeeper.EXPECT().GetModuleAddress(nft.ModuleName).Return(addrs[0]).AnyTimes() + + testCtx := testutil.DefaultContextWithDB(suite.T(), key, sdk.NewTransientStoreKey("transient_test")) + suite.baseApp = baseapp.NewBaseApp( + "nft", + log.NewNopLogger(), + testCtx.DB, + suite.encCfg.TxConfig.TxDecoder(), + ) + + suite.baseApp.SetCMS(testCtx.CMS) + + suite.baseApp.SetInterfaceRegistry(suite.encCfg.InterfaceRegistry) + suite.ctx = testCtx.Ctx.WithBlockHeader(tmproto.Header{Time: tmtime.Now()}) + + suite.nftKeeper = keeper.NewKeeper(key, suite.encCfg.Codec, suite.accountKeeper, suite.bankKeeper) + queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, suite.encCfg.InterfaceRegistry) + nft.RegisterQueryServer(queryHelper, suite.nftKeeper) + + cfg := moduletypes.NewConfigurator(suite.encCfg.Codec, suite.baseApp.MsgServiceRouter(), suite.baseApp.GRPCQueryRouter()) + + appModule := module.NewAppModule(suite.encCfg.Codec, suite.nftKeeper, suite.accountKeeper, suite.bankKeeper, suite.encCfg.InterfaceRegistry) + appModule.RegisterServices(cfg) + appModule.RegisterInterfaces(suite.encCfg.InterfaceRegistry) - suite.app = app - suite.ctx = app.BaseApp.NewContext(false, tmproto.Header{}) } func (suite *SimTestSuite) TestWeightedOperations() { weightedOps := simulation.WeightedOperations( - suite.interfaceRegistry, + suite.encCfg.InterfaceRegistry, make(simtypes.AppParams), - suite.codec, + suite.encCfg.Codec, suite.accountKeeper, suite.bankKeeper, suite.nftKeeper, ) + // begin new block + suite.baseApp.BeginBlock(abci.RequestBeginBlock{ + Header: tmproto.Header{ + Height: suite.baseApp.LastBlockHeight() + 1, + AppHash: suite.baseApp.LastCommitID().Hash, + }, + }) + // setup 3 accounts s := rand.NewSource(1) r := rand.New(s) accs := suite.getTestingAccounts(r, 3) + suite.accountKeeper.EXPECT().GetAccount(suite.ctx, accs[2].Address).Return(authtypes.NewBaseAccount(accs[2].Address, accs[2].PubKey, 0, 0)).Times(1) + suite.bankKeeper.EXPECT().SpendableCoins(suite.ctx, accs[2].Address).Return(sdk.Coins{sdk.NewInt64Coin("stake", 10)}).Times(1) + expected := []struct { weight int opMsgRoute string @@ -80,7 +112,7 @@ func (suite *SimTestSuite) TestWeightedOperations() { } for i, w := range weightedOps { - operationMsg, _, err := w.Op()(r, suite.app.BaseApp, suite.ctx, accs, "") + operationMsg, _, err := w.Op()(r, suite.baseApp, suite.ctx, accs, "") suite.Require().NoError(err) // the following checks are very much dependent from the ordering of the output given @@ -94,17 +126,6 @@ func (suite *SimTestSuite) TestWeightedOperations() { func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Account { accounts := simtypes.RandomAccounts(r, n) - - initAmt := suite.stakingKeeper.TokensFromConsensusPower(suite.ctx, 200000) - initCoins := sdk.NewCoins(sdk.NewCoin("stake", initAmt)) - - // add coins to the accounts - for _, account := range accounts { - acc := suite.accountKeeper.NewAccountWithAddress(suite.ctx, account.Address) - suite.accountKeeper.SetAccount(suite.ctx, acc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, suite.ctx, account.Address, initCoins)) - } - return accounts } @@ -115,22 +136,26 @@ func (suite *SimTestSuite) TestSimulateMsgSend() { blockTime := time.Now().UTC() ctx := suite.ctx.WithBlockTime(blockTime) + acc := authtypes.NewBaseAccount(accounts[0].Address, accounts[0].PubKey, 0, 0) + suite.accountKeeper.EXPECT().GetAccount(ctx, accounts[0].Address).Return(acc).Times(1) + suite.bankKeeper.EXPECT().SpendableCoins(ctx, accounts[0].Address).Return(sdk.Coins{sdk.NewInt64Coin("stake", 10)}).Times(1) + // begin new block - suite.app.BeginBlock(abci.RequestBeginBlock{ + suite.baseApp.BeginBlock(abci.RequestBeginBlock{ Header: tmproto.Header{ - Height: suite.app.LastBlockHeight() + 1, - AppHash: suite.app.LastCommitID().Hash, + Height: suite.baseApp.LastBlockHeight() + 1, + AppHash: suite.baseApp.LastCommitID().Hash, }, }) // execute operation - registry := suite.interfaceRegistry + registry := suite.encCfg.InterfaceRegistry op := simulation.SimulateMsgSend(codec.NewProtoCodec(registry), suite.accountKeeper, suite.bankKeeper, suite.nftKeeper) - operationMsg, futureOperations, err := op(r, suite.app.BaseApp, ctx, accounts, "") + operationMsg, futureOperations, err := op(r, suite.baseApp, ctx, accounts, "") suite.Require().NoError(err) var msg nft.MsgSend - suite.codec.UnmarshalJSON(operationMsg.Msg, &msg) + suite.encCfg.Codec.UnmarshalJSON(operationMsg.Msg, &msg) suite.Require().True(operationMsg.OK) suite.Require().Len(futureOperations, 0) } diff --git a/x/nft/testutil/app.yaml b/x/nft/testutil/app.yaml deleted file mode 100644 index 674372666a..0000000000 --- a/x/nft/testutil/app.yaml +++ /dev/null @@ -1,52 +0,0 @@ -modules: - - name: runtime - config: - "@type": cosmos.app.runtime.v1alpha1.Module - - app_name: NFTApp - - begin_blockers: [staking, auth, bank, mint, genutil, nft, params] - end_blockers: [staking, auth, bank, mint, genutil, nft, params] - init_genesis: [auth, bank, staking, mint, genutil, nft, params] - - - name: auth - config: - "@type": cosmos.auth.module.v1.Module - bech32_prefix: cosmos - module_account_permissions: - - account: fee_collector - - account: mint - permissions: [minter] - - account: bonded_tokens_pool - permissions: [burner, staking] - - account: not_bonded_tokens_pool - permissions: [burner, staking] - - account: nft - - - name: bank - config: - "@type": cosmos.bank.module.v1.Module - - - name: params - config: - "@type": cosmos.params.module.v1.Module - - - name: tx - config: - "@type": cosmos.tx.module.v1.Module - - - name: staking - config: - "@type": cosmos.staking.module.v1.Module - - - name: genutil - config: - "@type": cosmos.genutil.module.v1.Module - - - name: mint - config: - "@type": cosmos.mint.module.v1.Module - - - name: nft - config: - "@type": cosmos.nft.module.v1.Module diff --git a/x/nft/testutil/app_config.go b/x/nft/testutil/app_config.go index 69487c5fac..49354c549d 100644 --- a/x/nft/testutil/app_config.go +++ b/x/nft/testutil/app_config.go @@ -1,20 +1,108 @@ package testutil import ( - _ "embed" - "cosmossdk.io/core/appconfig" - _ "github.com/cosmos/cosmos-sdk/x/auth" - _ "github.com/cosmos/cosmos-sdk/x/auth/tx/module" - _ "github.com/cosmos/cosmos-sdk/x/bank" - _ "github.com/cosmos/cosmos-sdk/x/genutil" - _ "github.com/cosmos/cosmos-sdk/x/mint" - _ "github.com/cosmos/cosmos-sdk/x/nft/module" - _ "github.com/cosmos/cosmos-sdk/x/params" - _ "github.com/cosmos/cosmos-sdk/x/staking" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + "github.com/cosmos/cosmos-sdk/x/nft" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1" + appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1" + authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" + bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1" + genutilmodulev1 "cosmossdk.io/api/cosmos/genutil/module/v1" + mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1" + nftmodulev1 "cosmossdk.io/api/cosmos/nft/module/v1" + paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1" + stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1" + txmodulev1 "cosmossdk.io/api/cosmos/tx/module/v1" ) -//go:embed app.yaml -var appConfig []byte - -var AppConfig = appconfig.LoadYAML(appConfig) +var AppConfig = appconfig.Compose(&appv1alpha1.Config{ + Modules: []*appv1alpha1.ModuleConfig{ + { + Name: "runtime", + Config: appconfig.WrapAny(&runtimev1alpha1.Module{ + AppName: "NFTApp", + BeginBlockers: []string{ + minttypes.ModuleName, + stakingtypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + genutiltypes.ModuleName, + nft.ModuleName, + paramstypes.ModuleName, + }, + EndBlockers: []string{ + stakingtypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + minttypes.ModuleName, + genutiltypes.ModuleName, + nft.ModuleName, + paramstypes.ModuleName, + }, + OverrideStoreKeys: []*runtimev1alpha1.StoreKeyConfig{ + { + ModuleName: authtypes.ModuleName, + KvStoreKey: "acc", + }, + }, + InitGenesis: []string{ + authtypes.ModuleName, + banktypes.ModuleName, + stakingtypes.ModuleName, + minttypes.ModuleName, + genutiltypes.ModuleName, + nft.ModuleName, + paramstypes.ModuleName, + }, + }), + }, + { + Name: authtypes.ModuleName, + Config: appconfig.WrapAny(&authmodulev1.Module{ + Bech32Prefix: "cosmos", + ModuleAccountPermissions: []*authmodulev1.ModuleAccountPermission{ + {Account: authtypes.FeeCollectorName}, + {Account: minttypes.ModuleName, Permissions: []string{authtypes.Minter}}, + {Account: stakingtypes.BondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: stakingtypes.NotBondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: nft.ModuleName}, + }, + }), + }, + { + Name: banktypes.ModuleName, + Config: appconfig.WrapAny(&bankmodulev1.Module{}), + }, + { + Name: stakingtypes.ModuleName, + Config: appconfig.WrapAny(&stakingmodulev1.Module{}), + }, + { + Name: paramstypes.ModuleName, + Config: appconfig.WrapAny(¶msmodulev1.Module{}), + }, + { + Name: "tx", + Config: appconfig.WrapAny(&txmodulev1.Module{}), + }, + { + Name: genutiltypes.ModuleName, + Config: appconfig.WrapAny(&genutilmodulev1.Module{}), + }, + { + Name: minttypes.ModuleName, + Config: appconfig.WrapAny(&mintmodulev1.Module{}), + }, + { + Name: nft.ModuleName, + Config: appconfig.WrapAny(&nftmodulev1.Module{}), + }, + }, +}) diff --git a/x/nft/testutil/expected_keepers_mocks.go b/x/nft/testutil/expected_keepers_mocks.go new file mode 100644 index 0000000000..49d193397e --- /dev/null +++ b/x/nft/testutil/expected_keepers_mocks.go @@ -0,0 +1,101 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: x/nft/expected_keepers.go + +// Package testutil is a generated GoMock package. +package testutil + +import ( + reflect "reflect" + + types "github.com/cosmos/cosmos-sdk/types" + types0 "github.com/cosmos/cosmos-sdk/x/auth/types" + gomock "github.com/golang/mock/gomock" +) + +// MockBankKeeper is a mock of BankKeeper interface. +type MockBankKeeper struct { + ctrl *gomock.Controller + recorder *MockBankKeeperMockRecorder +} + +// MockBankKeeperMockRecorder is the mock recorder for MockBankKeeper. +type MockBankKeeperMockRecorder struct { + mock *MockBankKeeper +} + +// NewMockBankKeeper creates a new mock instance. +func NewMockBankKeeper(ctrl *gomock.Controller) *MockBankKeeper { + mock := &MockBankKeeper{ctrl: ctrl} + mock.recorder = &MockBankKeeperMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBankKeeper) EXPECT() *MockBankKeeperMockRecorder { + return m.recorder +} + +// SpendableCoins mocks base method. +func (m *MockBankKeeper) SpendableCoins(ctx types.Context, addr types.AccAddress) types.Coins { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SpendableCoins", ctx, addr) + ret0, _ := ret[0].(types.Coins) + return ret0 +} + +// SpendableCoins indicates an expected call of SpendableCoins. +func (mr *MockBankKeeperMockRecorder) SpendableCoins(ctx, addr interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SpendableCoins", reflect.TypeOf((*MockBankKeeper)(nil).SpendableCoins), ctx, addr) +} + +// MockAccountKeeper is a mock of AccountKeeper interface. +type MockAccountKeeper struct { + ctrl *gomock.Controller + recorder *MockAccountKeeperMockRecorder +} + +// MockAccountKeeperMockRecorder is the mock recorder for MockAccountKeeper. +type MockAccountKeeperMockRecorder struct { + mock *MockAccountKeeper +} + +// NewMockAccountKeeper creates a new mock instance. +func NewMockAccountKeeper(ctrl *gomock.Controller) *MockAccountKeeper { + mock := &MockAccountKeeper{ctrl: ctrl} + mock.recorder = &MockAccountKeeperMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAccountKeeper) EXPECT() *MockAccountKeeperMockRecorder { + return m.recorder +} + +// GetAccount mocks base method. +func (m *MockAccountKeeper) GetAccount(ctx types.Context, addr types.AccAddress) types0.AccountI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAccount", ctx, addr) + ret0, _ := ret[0].(types0.AccountI) + return ret0 +} + +// GetAccount indicates an expected call of GetAccount. +func (mr *MockAccountKeeperMockRecorder) GetAccount(ctx, addr interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccount", reflect.TypeOf((*MockAccountKeeper)(nil).GetAccount), ctx, addr) +} + +// GetModuleAddress mocks base method. +func (m *MockAccountKeeper) GetModuleAddress(name string) types.AccAddress { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetModuleAddress", name) + ret0, _ := ret[0].(types.AccAddress) + return ret0 +} + +// GetModuleAddress indicates an expected call of GetModuleAddress. +func (mr *MockAccountKeeperMockRecorder) GetModuleAddress(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetModuleAddress", reflect.TypeOf((*MockAccountKeeper)(nil).GetModuleAddress), name) +}