Skip to content

Commit

Permalink
Update cellarfees keeper unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
cbrit committed Mar 5, 2024
1 parent f8a6ee1 commit 4de900c
Show file tree
Hide file tree
Showing 8 changed files with 348 additions and 339 deletions.
254 changes: 69 additions & 185 deletions x/cellarfees/keeper/abci_test.go

Large diffs are not rendered by default.

25 changes: 13 additions & 12 deletions x/cellarfees/keeper/auction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/golang/mock/gomock"
auctionTypes "github.com/peggyjv/sommelier/v7/x/auction/types"
cellarfeesTypes "github.com/peggyjv/sommelier/v7/x/cellarfees/types"
cellarfeestypes "github.com/peggyjv/sommelier/v7/x/cellarfees/types"
cellarfeestypesv2 "github.com/peggyjv/sommelier/v7/x/cellarfees/types/v2"
)

const feeDenom = "testdenom"
Expand All @@ -13,13 +14,13 @@ func (suite *KeeperTestSuite) TestHappyPathBeginAuction() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

params := cellarfeesTypes.DefaultParams()
params := cellarfeestypesv2.DefaultParams()
cellarfeesKeeper.SetParams(ctx, params)

fees := sdk.NewCoin(feeDenom, sdk.NewInt(1000000))

// retreiving module account
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeesTypes.ModuleName).Return(feesAccount)
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(feesAccount)

// no active auctions
suite.auctionKeeper.EXPECT().GetActiveAuctions(ctx).Return([]*auctionTypes.Auction{})
Expand All @@ -37,13 +38,13 @@ func (suite *KeeperTestSuite) TestAuctionFeeBalanceZeroDoesNotStartAuction() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

params := cellarfeesTypes.DefaultParams()
params := cellarfeestypesv2.DefaultParams()
cellarfeesKeeper.SetParams(ctx, params)

fees := sdk.NewCoin(feeDenom, sdk.NewInt(0))

// retreiving module account
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeesTypes.ModuleName).Return(feesAccount)
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(feesAccount)

// no active auctions
suite.auctionKeeper.EXPECT().GetActiveAuctions(ctx).Return([]*auctionTypes.Auction{})
Expand All @@ -58,13 +59,13 @@ func (suite *KeeperTestSuite) TestAuctionUnauthorizedFundingModule() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

params := cellarfeesTypes.DefaultParams()
params := cellarfeestypesv2.DefaultParams()
cellarfeesKeeper.SetParams(ctx, params)

fees := sdk.NewCoin(feeDenom, sdk.NewInt(1000000))

// retreiving module account
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeesTypes.ModuleName).Return(feesAccount)
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(feesAccount)

// no active auctions
suite.auctionKeeper.EXPECT().GetActiveAuctions(ctx).Return([]*auctionTypes.Auction{})
Expand All @@ -82,13 +83,13 @@ func (suite *KeeperTestSuite) TestAuctionUnauthorizedProceedsModule() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

params := cellarfeesTypes.DefaultParams()
params := cellarfeestypesv2.DefaultParams()
cellarfeesKeeper.SetParams(ctx, params)

fees := sdk.NewCoin(feeDenom, sdk.NewInt(1000000))

// retreiving module account
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeesTypes.ModuleName).Return(feesAccount)
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(feesAccount)

// no active auctions
suite.auctionKeeper.EXPECT().GetActiveAuctions(ctx).Return([]*auctionTypes.Auction{})
Expand All @@ -106,13 +107,13 @@ func (suite *KeeperTestSuite) TestAuctionNonPanicError() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

params := cellarfeesTypes.DefaultParams()
params := cellarfeestypesv2.DefaultParams()
cellarfeesKeeper.SetParams(ctx, params)

fees := sdk.NewCoin(feeDenom, sdk.NewInt(1000000))

// retreiving module account
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeesTypes.ModuleName).Return(feesAccount)
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(feesAccount)

// no active auctions
suite.auctionKeeper.EXPECT().GetActiveAuctions(ctx).Return([]*auctionTypes.Auction{})
Expand All @@ -130,7 +131,7 @@ func (suite *KeeperTestSuite) TestAuctionAlreadyActive() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

params := cellarfeesTypes.DefaultParams()
params := cellarfeestypesv2.DefaultParams()
cellarfeesKeeper.SetParams(ctx, params)

fees := sdk.NewCoin(feeDenom, sdk.NewInt(1000000))
Expand Down
78 changes: 78 additions & 0 deletions x/cellarfees/keeper/cellarfees_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"
accounttypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/peggyjv/sommelier/v7/app/params"
auctiontypes "github.com/peggyjv/sommelier/v7/x/auction/types"
cellarfeestypes "github.com/peggyjv/sommelier/v7/x/cellarfees/types"
cellarfeestypesv2 "github.com/peggyjv/sommelier/v7/x/cellarfees/types/v2"
)

func (suite *KeeperTestSuite) TestGetFeesAccount() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

expectedAddress := "somm1hqf42j6zxfnth4xpdse05wpnjjrgc864vwujxx"
account := accounttypes.ModuleAccount{
Name: cellarfeestypes.ModuleName,
BaseAccount: accounttypes.NewBaseAccountWithAddress(sdk.MustAccAddressFromBech32(expectedAddress)),
}
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(&account)

address := cellarfeesKeeper.GetFeesAccount(ctx).GetAddress().String()

require.Equal(expectedAddress, address)
}

func (suite *KeeperTestSuite) TestGetFeeBalance() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

expectedDenom := "testdenom"
expectedBalance := sdk.NewCoin(expectedDenom, sdk.NewInt(1000000))
account := accounttypes.ModuleAccount{
Name: cellarfeestypes.ModuleName,
BaseAccount: accounttypes.NewBaseAccountWithAddress(sdk.MustAccAddressFromBech32("somm1hqf42j6zxfnth4xpdse05wpnjjrgc864vwujxx")),
}
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, cellarfeestypes.ModuleName).Return(&account)
suite.bankKeeper.EXPECT().GetBalance(ctx, account.GetAddress(), expectedDenom).Return(expectedBalance)

balance := cellarfeesKeeper.GetFeeBalance(ctx, expectedDenom)

require.Equal(expectedBalance, balance)
}

func (suite *KeeperTestSuite) TestGetBalanceUsdValue() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

balance := sdk.NewCoin("testdenom", sdk.NewInt(1000000))
usdPrice := sdk.NewDec(100)
tokenPrice := &auctiontypes.TokenPrice{
Exponent: 6,
UsdPrice: usdPrice,
}

expectedUsdValue := usdPrice.Mul(sdk.NewDecFromInt(balance.Amount).Quo(sdk.NewDec(10).Power(tokenPrice.Exponent)))
usdValue := cellarfeesKeeper.GetBalanceUsdValue(ctx, balance, tokenPrice)

require.Equal(expectedUsdValue, usdValue)
}

func (suite *KeeperTestSuite) TestGetEmission() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

remainingRewardsSupply := sdk.NewInt(1000000)
previousSupplyPeak := sdk.NewInt(500000)
cellarfeesParams := cellarfeestypesv2.DefaultParams()
cellarfeesParams.RewardEmissionPeriod = 10
cellarfeesKeeper.SetParams(ctx, cellarfeesParams)
cellarfeesKeeper.SetLastRewardSupplyPeak(ctx, previousSupplyPeak)

expectedEmissionAmount := remainingRewardsSupply.Quo(sdk.NewInt(int64(cellarfeesParams.RewardEmissionPeriod)))
emission := cellarfeesKeeper.GetEmission(ctx, remainingRewardsSupply)

require.Equal(sdk.NewCoins(sdk.NewCoin(params.BaseCoinUnit, expectedEmissionAmount)), emission)
}
48 changes: 8 additions & 40 deletions x/cellarfees/keeper/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,37 @@ package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"
cellarfeesTypes "github.com/peggyjv/sommelier/v7/x/cellarfees/types"
cellarfeestypesv2 "github.com/peggyjv/sommelier/v7/x/cellarfees/types/v2"
)

func (suite *KeeperTestSuite) TestImportingEmptyGenesis() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

testGenesis := cellarfeesTypes.GenesisState{}
testGenesis := cellarfeestypesv2.GenesisState{}

// Canary to make sure validate basic is being run
require.Panics(func() { cellarfeesKeeper.InitGenesis(ctx, testGenesis) })

testGenesis = cellarfeesTypes.DefaultGenesisState()
testGenesis = cellarfeestypesv2.DefaultGenesisState()
require.NotPanics(func() {
suite.accountKeeper.EXPECT().GetModuleAccount(ctx, feesAccount.GetName()).Return(feesAccount)
cellarfeesKeeper.InitGenesis(ctx, testGenesis)
})

require.Len(cellarfeesKeeper.GetFeeAccrualCounters(ctx).Counters, 0)
require.Zero(cellarfeesKeeper.GetLastRewardSupplyPeak(ctx).Int64())
require.Equal(cellarfeesKeeper.GetParams(ctx), cellarfeesTypes.DefaultParams())
require.Equal(cellarfeesKeeper.GetParams(ctx), cellarfeestypesv2.DefaultParams())
}

func (suite *KeeperTestSuite) TestImportingPopulatedGenesis() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

testGenesis := cellarfeesTypes.GenesisState{}
testGenesis := cellarfeestypesv2.GenesisState{}

// Canary to make sure validate basic is being run
require.Panics(func() { cellarfeesKeeper.InitGenesis(ctx, testGenesis) })

testGenesis.FeeAccrualCounters = cellarfeesTypes.FeeAccrualCounters{
Counters: []cellarfeesTypes.FeeAccrualCounter{
{
Denom: "denom1",
Count: 2,
},
{
Denom: "denom2",
Count: 0,
},
},
}
testGenesis.LastRewardSupplyPeak = sdk.NewInt(1337)
testGenesis.Params.FeeAccrualAuctionThreshold = 2
testGenesis.Params.InitialPriceDecreaseRate = sdk.MustNewDecFromStr("0.01")
testGenesis.Params.PriceDecreaseBlockInterval = 10
testGenesis.Params.RewardEmissionPeriod = 600
Expand All @@ -58,7 +43,6 @@ func (suite *KeeperTestSuite) TestImportingPopulatedGenesis() {
cellarfeesKeeper.InitGenesis(ctx, testGenesis)
})

require.Equal(testGenesis.FeeAccrualCounters, cellarfeesKeeper.GetFeeAccrualCounters(ctx))
require.Equal(testGenesis.LastRewardSupplyPeak, cellarfeesKeeper.GetLastRewardSupplyPeak(ctx))
require.Equal(testGenesis.Params, cellarfeesKeeper.GetParams(ctx))
}
Expand All @@ -67,42 +51,26 @@ func (suite *KeeperTestSuite) TestExportingEmptyGenesis() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

cellarfeesKeeper.SetParams(ctx, cellarfeesTypes.DefaultParams())
cellarfeesKeeper.SetFeeAccrualCounters(ctx, cellarfeesTypes.DefaultFeeAccrualCounters())
cellarfeesKeeper.SetParams(ctx, cellarfeestypesv2.DefaultParams())
cellarfeesKeeper.SetLastRewardSupplyPeak(ctx, sdk.ZeroInt())

require.Equal(cellarfeesTypes.DefaultGenesisState(), cellarfeesKeeper.ExportGenesis(ctx))
require.Equal(cellarfeestypesv2.DefaultGenesisState(), cellarfeesKeeper.ExportGenesis(ctx))
}

func (suite *KeeperTestSuite) TestExportingPopulatedGenesis() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

var params cellarfeesTypes.Params
params.FeeAccrualAuctionThreshold = 2
var params cellarfeestypesv2.Params
params.InitialPriceDecreaseRate = sdk.MustNewDecFromStr("0.01")
params.PriceDecreaseBlockInterval = 10
params.RewardEmissionPeriod = 600
params.AuctionInterval = 1000
cellarfeesKeeper.SetParams(ctx, params)
counters := cellarfeesTypes.FeeAccrualCounters{
Counters: []cellarfeesTypes.FeeAccrualCounter{
{
Denom: "denom1",
Count: 2,
},
{
Denom: "denom2",
Count: 0,
},
},
}
cellarfeesKeeper.SetFeeAccrualCounters(ctx, counters)
peak := sdk.NewInt(1337)
cellarfeesKeeper.SetLastRewardSupplyPeak(ctx, peak)

export := cellarfeesKeeper.ExportGenesis(ctx)
require.Equal(params, export.Params)
require.Equal(counters, export.FeeAccrualCounters)
require.Equal(peak, export.LastRewardSupplyPeak)
}
32 changes: 10 additions & 22 deletions x/cellarfees/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import (
cellarfeestestutil "github.com/peggyjv/sommelier/v7/x/cellarfees/testutil"

moduletestutil "github.com/peggyjv/sommelier/v7/testutil"
cellarfeesTypes "github.com/peggyjv/sommelier/v7/x/cellarfees/types"
cellarfeestypes "github.com/peggyjv/sommelier/v7/x/cellarfees/types"
cellarfeestypesv2 "github.com/peggyjv/sommelier/v7/x/cellarfees/types/v2"
"github.com/stretchr/testify/suite"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
tmtime "github.com/tendermint/tendermint/types/time"
Expand All @@ -34,16 +35,15 @@ type KeeperTestSuite struct {
bankKeeper *cellarfeestestutil.MockBankKeeper
mintKeeper *cellarfeestestutil.MockMintKeeper
corkKeeper *cellarfeestestutil.MockCorkKeeper
gravityKeeper *cellarfeestestutil.MockGravityKeeper
auctionKeeper *cellarfeestestutil.MockAuctionKeeper

queryClient cellarfeesTypes.QueryClient
queryClient cellarfeestypesv2.QueryClient

encCfg moduletestutil.TestEncodingConfig
}

func (suite *KeeperTestSuite) SetupTest() {
key := sdk.NewKVStoreKey(cellarfeesTypes.StoreKey)
key := sdk.NewKVStoreKey(cellarfeestypes.StoreKey)
tkey := sdk.NewTransientStoreKey("transient_test")
testCtx := testutil.DefaultContext(key, tkey)
ctx := testCtx.WithBlockHeader(tmproto.Header{Height: 5, Time: tmtime.Now()})
Expand All @@ -57,7 +57,6 @@ func (suite *KeeperTestSuite) SetupTest() {
suite.mintKeeper = cellarfeestestutil.NewMockMintKeeper(ctrl)
suite.accountKeeper = cellarfeestestutil.NewMockAccountKeeper(ctrl)
suite.corkKeeper = cellarfeestestutil.NewMockCorkKeeper(ctrl)
suite.gravityKeeper = cellarfeestestutil.NewMockGravityKeeper(ctrl)
suite.auctionKeeper = cellarfeestestutil.NewMockAuctionKeeper(ctrl)
suite.ctx = ctx

Expand All @@ -68,8 +67,8 @@ func (suite *KeeperTestSuite) SetupTest() {
tkey,
)

params.Subspace(cellarfeesTypes.ModuleName)
subSpace, found := params.GetSubspace(cellarfeesTypes.ModuleName)
params.Subspace(cellarfeestypes.ModuleName)
subSpace, found := params.GetSubspace(cellarfeestypes.ModuleName)
suite.Assertions.True(found)

suite.cellarfeesKeeper = NewKeeper(
Expand All @@ -80,15 +79,14 @@ func (suite *KeeperTestSuite) SetupTest() {
suite.bankKeeper,
suite.mintKeeper,
suite.corkKeeper,
suite.gravityKeeper,
suite.auctionKeeper,
)

cellarfeesTypes.RegisterInterfaces(encCfg.InterfaceRegistry)
cellarfeestypesv2.RegisterInterfaces(encCfg.InterfaceRegistry)

queryHelper := baseapp.NewQueryServerTestHelper(ctx, encCfg.InterfaceRegistry)
cellarfeesTypes.RegisterQueryServer(queryHelper, suite.cellarfeesKeeper)
queryClient := cellarfeesTypes.NewQueryClient(queryHelper)
cellarfeestypesv2.RegisterQueryServer(queryHelper, suite.cellarfeesKeeper)
queryClient := cellarfeestypesv2.NewQueryClient(queryHelper)

suite.queryClient = queryClient
suite.encCfg = encCfg
Expand All @@ -98,16 +96,6 @@ func TestKeeperTestSuite(t *testing.T) {
suite.Run(t, new(KeeperTestSuite))
}

func (suite *KeeperTestSuite) TestKeeperGettingSettingFeeAccrualCounters() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()

expected := cellarfeesTypes.DefaultFeeAccrualCounters()
cellarfeesKeeper.SetFeeAccrualCounters(ctx, expected)

require.Equal(expected, cellarfeesKeeper.GetFeeAccrualCounters(ctx))
}

func (suite *KeeperTestSuite) TestKeeperGettingSettingLastRewardSupplyPeak() {
ctx, cellarfeesKeeper := suite.ctx, suite.cellarfeesKeeper
require := suite.Require()
Expand All @@ -127,7 +115,7 @@ func (suite *KeeperTestSuite) TestGetAPY() {
lastPeak := sdk.NewInt(10_000_000)

cellarfeesKeeper.SetLastRewardSupplyPeak(ctx, lastPeak)
cellarfeesParams := cellarfeesTypes.DefaultParams()
cellarfeesParams := cellarfeestypesv2.DefaultParams()
cellarfeesParams.RewardEmissionPeriod = 10
cellarfeesKeeper.SetParams(ctx, cellarfeesParams)
suite.mintKeeper.EXPECT().GetParams(ctx).Return(minttypes.Params{
Expand Down
3 changes: 2 additions & 1 deletion x/cellarfees/keeper/query_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ func (k Keeper) QueryFeeTokenBalances(c context.Context, _ *types.QueryFeeTokenB

// because we can't get a USD value without a corresponding TokenPrice set in the auction module,
// this exclude fee token balances that don't have one yet.
for _, tokenPrice := range k.auctionKeeper.GetTokenPrices(ctx) {
tokenPrices := k.auctionKeeper.GetTokenPrices(ctx)
for _, tokenPrice := range tokenPrices {
balance := k.GetFeeBalance(ctx, tokenPrice.Denom)

if balance.IsZero() {
Expand Down
Loading

0 comments on commit 4de900c

Please sign in to comment.