package keeper_test import ( "testing" "github.com/stretchr/testify/suite" "go.uber.org/mock/gomock" "cosmossdk.io/math" storetypes "cosmossdk.io/store/types" "git.cw.tr/mukan-network/mukan-sdk/runtime" "git.cw.tr/mukan-network/mukan-sdk/testutil" sdk "git.cw.tr/mukan-network/mukan-sdk/types" moduletestutil "git.cw.tr/mukan-network/mukan-sdk/types/module/testutil" authtypes "git.cw.tr/mukan-network/mukan-sdk/x/auth/types" govtypes "git.cw.tr/mukan-network/mukan-sdk/x/gov/types" "git.cw.tr/mukan-network/mukan-sdk/x/mint" "git.cw.tr/mukan-network/mukan-sdk/x/mint/keeper" minttestutil "git.cw.tr/mukan-network/mukan-sdk/x/mint/testutil" "git.cw.tr/mukan-network/mukan-sdk/x/mint/types" ) type IntegrationTestSuite struct { suite.Suite mintKeeper keeper.Keeper ctx sdk.Context msgServer types.MsgServer stakingKeeper *minttestutil.MockStakingKeeper bankKeeper *minttestutil.MockBankKeeper } func TestKeeperTestSuite(t *testing.T) { suite.Run(t, new(IntegrationTestSuite)) } func (s *IntegrationTestSuite) SetupTest() { encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) key := storetypes.NewKVStoreKey(types.StoreKey) storeService := runtime.NewKVStoreService(key) testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test")) s.ctx = testCtx.Ctx // gomock initializations ctrl := gomock.NewController(s.T()) accountKeeper := minttestutil.NewMockAccountKeeper(ctrl) bankKeeper := minttestutil.NewMockBankKeeper(ctrl) stakingKeeper := minttestutil.NewMockStakingKeeper(ctrl) accountKeeper.EXPECT().GetModuleAddress(types.ModuleName).Return(sdk.AccAddress{}) s.mintKeeper = keeper.NewKeeper( encCfg.Codec, storeService, stakingKeeper, accountKeeper, bankKeeper, authtypes.FeeCollectorName, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) s.stakingKeeper = stakingKeeper s.bankKeeper = bankKeeper s.Require().Equal(testCtx.Ctx.Logger().With("module", "x/"+types.ModuleName), s.mintKeeper.Logger(testCtx.Ctx)) err := s.mintKeeper.Params.Set(s.ctx, types.DefaultParams()) s.Require().NoError(err) s.Require().NoError(s.mintKeeper.Minter.Set(s.ctx, types.DefaultInitialMinter())) s.msgServer = keeper.NewMsgServerImpl(s.mintKeeper) } func (s *IntegrationTestSuite) TestAliasFunctions() { stakingTokenSupply := math.NewIntFromUint64(100000000000) s.stakingKeeper.EXPECT().StakingTokenSupply(s.ctx).Return(stakingTokenSupply, nil) tokenSupply, err := s.mintKeeper.StakingTokenSupply(s.ctx) s.Require().NoError(err) s.Require().Equal(tokenSupply, stakingTokenSupply) bondedRatio := math.LegacyNewDecWithPrec(15, 2) s.stakingKeeper.EXPECT().BondedRatio(s.ctx).Return(bondedRatio, nil) ratio, err := s.mintKeeper.BondedRatio(s.ctx) s.Require().NoError(err) s.Require().Equal(ratio, bondedRatio) coins := sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(1000000))) s.bankKeeper.EXPECT().MintCoins(s.ctx, types.ModuleName, coins).Return(nil) s.Require().Equal(s.mintKeeper.MintCoins(s.ctx, sdk.NewCoins()), nil) s.Require().Nil(s.mintKeeper.MintCoins(s.ctx, coins)) fees := sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(1000))) s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(s.ctx, types.ModuleName, authtypes.FeeCollectorName, fees).Return(nil) s.Require().Nil(s.mintKeeper.AddCollectedFees(s.ctx, fees)) }