2019-12-05 13:53:28 +00:00
|
|
|
package auction_test
|
2019-11-25 19:46:02 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
2019-12-28 22:00:04 +00:00
|
|
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
|
|
|
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
|
|
|
"github.com/cosmos/cosmos-sdk/x/supply"
|
2019-11-25 19:46:02 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
2019-12-05 13:53:28 +00:00
|
|
|
|
|
|
|
"github.com/kava-labs/kava/app"
|
|
|
|
"github.com/kava-labs/kava/x/auction"
|
2019-12-28 22:00:04 +00:00
|
|
|
"github.com/kava-labs/kava/x/liquidator"
|
2019-11-25 19:46:02 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestKeeper_EndBlocker(t *testing.T) {
|
2019-12-05 13:53:28 +00:00
|
|
|
// Setup
|
2019-12-28 22:00:04 +00:00
|
|
|
_, addrs := app.GeneratePrivKeyAddressPairs(2)
|
|
|
|
buyer := addrs[0]
|
2019-12-31 11:10:15 +00:00
|
|
|
returnAddrs := addrs[1:]
|
|
|
|
returnWeights := []sdk.Int{sdk.NewInt(1)}
|
2019-12-28 22:00:04 +00:00
|
|
|
sellerModName := liquidator.ModuleName
|
|
|
|
//sellerAddr := supply.NewModuleAddress(sellerModName)
|
2019-12-05 13:53:28 +00:00
|
|
|
|
|
|
|
tApp := app.NewTestApp()
|
2019-12-28 22:00:04 +00:00
|
|
|
sellerAcc := supply.NewEmptyModuleAccount(sellerModName)
|
|
|
|
require.NoError(t, sellerAcc.SetCoins(cs(c("token1", 100), c("token2", 100))))
|
2019-12-07 01:25:45 +00:00
|
|
|
tApp.InitializeFromGenesisStates(
|
2019-12-28 22:00:04 +00:00
|
|
|
NewAuthGenStateFromAccs(authexported.GenesisAccounts{
|
|
|
|
auth.NewBaseAccount(buyer, cs(c("token1", 100), c("token2", 100)), nil, 0, 0),
|
|
|
|
sellerAcc,
|
|
|
|
}),
|
2019-12-07 01:25:45 +00:00
|
|
|
)
|
2019-12-05 13:53:28 +00:00
|
|
|
|
|
|
|
ctx := tApp.NewContext(true, abci.Header{})
|
|
|
|
keeper := tApp.GetAuctionKeeper()
|
2019-11-25 19:46:02 +00:00
|
|
|
|
2019-12-31 11:10:15 +00:00
|
|
|
auctionID, err := keeper.StartForwardReverseAuction(ctx, sellerModName, c("token1", 20), c("token2", 50), returnAddrs, returnWeights)
|
2019-12-05 13:53:28 +00:00
|
|
|
require.NoError(t, err)
|
2019-12-28 22:00:04 +00:00
|
|
|
require.NoError(t, keeper.PlaceBid(ctx, auctionID, buyer, c("token2", 30), c("token1", 20)))
|
2019-11-25 19:46:02 +00:00
|
|
|
|
2019-12-28 22:00:04 +00:00
|
|
|
// Run the endblocker, simulating a block time 1ns before auction expiry
|
|
|
|
preExpiryTime := ctx.BlockTime().Add(auction.DefaultBidDuration - 1)
|
|
|
|
auction.EndBlocker(ctx.WithBlockTime(preExpiryTime), keeper)
|
2019-11-25 19:46:02 +00:00
|
|
|
|
2019-12-05 13:53:28 +00:00
|
|
|
// Check auction has not been closed yet
|
|
|
|
_, found := keeper.GetAuction(ctx, auctionID)
|
|
|
|
require.True(t, found)
|
|
|
|
|
2019-12-28 22:00:04 +00:00
|
|
|
// Run the endblocker, simulating a block time equal to auction expiry
|
|
|
|
expiryTime := ctx.BlockTime().Add(auction.DefaultBidDuration)
|
|
|
|
auction.EndBlocker(ctx.WithBlockTime(expiryTime), keeper)
|
2019-12-05 13:53:28 +00:00
|
|
|
|
|
|
|
// Check auction has been closed
|
|
|
|
_, found = keeper.GetAuction(ctx, auctionID)
|
2019-11-25 19:46:02 +00:00
|
|
|
require.False(t, found)
|
|
|
|
}
|
2019-12-05 13:53:28 +00:00
|
|
|
|
|
|
|
func c(denom string, amount int64) sdk.Coin { return sdk.NewInt64Coin(denom, amount) }
|
|
|
|
func cs(coins ...sdk.Coin) sdk.Coins { return sdk.NewCoins(coins...) }
|
2019-12-28 22:00:04 +00:00
|
|
|
|
|
|
|
func NewAuthGenStateFromAccs(accounts authexported.GenesisAccounts) app.GenesisState {
|
|
|
|
authGenesis := auth.NewGenesisState(auth.DefaultParams(), accounts)
|
|
|
|
return app.GenesisState{auth.ModuleName: auth.ModuleCdc.MustMarshalJSON(authGenesis)}
|
|
|
|
}
|