github.com/cosmos/cosmos-sdk@v0.50.10/x/mint/keeper/genesis_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/golang/mock/gomock"
     7  	"github.com/stretchr/testify/suite"
     8  
     9  	"cosmossdk.io/collections"
    10  	"cosmossdk.io/math"
    11  	storetypes "cosmossdk.io/store/types"
    12  
    13  	"github.com/cosmos/cosmos-sdk/codec"
    14  	"github.com/cosmos/cosmos-sdk/runtime"
    15  	"github.com/cosmos/cosmos-sdk/testutil"
    16  	sdk "github.com/cosmos/cosmos-sdk/types"
    17  	moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
    18  	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
    19  	"github.com/cosmos/cosmos-sdk/x/mint"
    20  	"github.com/cosmos/cosmos-sdk/x/mint/keeper"
    21  	minttestutil "github.com/cosmos/cosmos-sdk/x/mint/testutil"
    22  	"github.com/cosmos/cosmos-sdk/x/mint/types"
    23  )
    24  
    25  var minterAcc = authtypes.NewEmptyModuleAccount(types.ModuleName, authtypes.Minter)
    26  
    27  type GenesisTestSuite struct {
    28  	suite.Suite
    29  
    30  	sdkCtx        sdk.Context
    31  	keeper        keeper.Keeper
    32  	cdc           codec.BinaryCodec
    33  	accountKeeper types.AccountKeeper
    34  	key           *storetypes.KVStoreKey
    35  }
    36  
    37  func TestGenesisTestSuite(t *testing.T) {
    38  	suite.Run(t, new(GenesisTestSuite))
    39  }
    40  
    41  func (s *GenesisTestSuite) SetupTest() {
    42  	key := storetypes.NewKVStoreKey(types.StoreKey)
    43  	testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test"))
    44  	encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{})
    45  
    46  	// gomock initializations
    47  	ctrl := gomock.NewController(s.T())
    48  	s.cdc = codec.NewProtoCodec(encCfg.InterfaceRegistry)
    49  	s.sdkCtx = testCtx.Ctx
    50  	s.key = key
    51  
    52  	stakingKeeper := minttestutil.NewMockStakingKeeper(ctrl)
    53  	accountKeeper := minttestutil.NewMockAccountKeeper(ctrl)
    54  	bankKeeper := minttestutil.NewMockBankKeeper(ctrl)
    55  	s.accountKeeper = accountKeeper
    56  	accountKeeper.EXPECT().GetModuleAddress(minterAcc.Name).Return(minterAcc.GetAddress())
    57  	accountKeeper.EXPECT().GetModuleAccount(s.sdkCtx, minterAcc.Name).Return(minterAcc)
    58  
    59  	s.keeper = keeper.NewKeeper(s.cdc, runtime.NewKVStoreService(key), stakingKeeper, accountKeeper, bankKeeper, "", "")
    60  }
    61  
    62  func (s *GenesisTestSuite) TestImportExportGenesis() {
    63  	genesisState := types.DefaultGenesisState()
    64  	genesisState.Minter = types.NewMinter(math.LegacyNewDecWithPrec(20, 2), math.LegacyNewDec(1))
    65  	genesisState.Params = types.NewParams(
    66  		"testDenom",
    67  		math.LegacyNewDecWithPrec(15, 2),
    68  		math.LegacyNewDecWithPrec(22, 2),
    69  		math.LegacyNewDecWithPrec(9, 2),
    70  		math.LegacyNewDecWithPrec(69, 2),
    71  		uint64(60*60*8766/5),
    72  	)
    73  
    74  	s.keeper.InitGenesis(s.sdkCtx, s.accountKeeper, genesisState)
    75  
    76  	minter, err := s.keeper.Minter.Get(s.sdkCtx)
    77  	s.Require().Equal(genesisState.Minter, minter)
    78  	s.Require().NoError(err)
    79  
    80  	invalidCtx := testutil.DefaultContextWithDB(s.T(), s.key, storetypes.NewTransientStoreKey("transient_test"))
    81  	_, err = s.keeper.Minter.Get(invalidCtx.Ctx)
    82  	s.Require().ErrorIs(err, collections.ErrNotFound)
    83  
    84  	params, err := s.keeper.Params.Get(s.sdkCtx)
    85  	s.Require().Equal(genesisState.Params, params)
    86  	s.Require().NoError(err)
    87  
    88  	genesisState2 := s.keeper.ExportGenesis(s.sdkCtx)
    89  	s.Require().Equal(genesisState, genesisState2)
    90  }