github.com/gravity-devs/liquidity@v1.5.3/x/liquidity/keeper/genesis_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	sdk "github.com/cosmos/cosmos-sdk/types"
     8  	"github.com/stretchr/testify/require"
     9  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
    10  
    11  	"github.com/gravity-devs/liquidity/app"
    12  	"github.com/gravity-devs/liquidity/x/liquidity"
    13  	"github.com/gravity-devs/liquidity/x/liquidity/types"
    14  )
    15  
    16  func TestGenesis(t *testing.T) {
    17  	simapp, ctx := app.CreateTestInput()
    18  
    19  	lk := simapp.LiquidityKeeper
    20  
    21  	// default genesis state
    22  	genState := types.DefaultGenesisState()
    23  	require.Equal(t, sdk.NewDecWithPrec(3, 3), genState.Params.SwapFeeRate)
    24  
    25  	// change swap fee rate
    26  	params := lk.GetParams(ctx)
    27  	params.SwapFeeRate = sdk.NewDecWithPrec(5, 3)
    28  
    29  	// set params
    30  	lk.SetParams(ctx, params)
    31  
    32  	newGenState := lk.ExportGenesis(ctx)
    33  	require.Equal(t, sdk.NewDecWithPrec(5, 3), newGenState.Params.SwapFeeRate)
    34  
    35  	fmt.Println("newGenState: ", newGenState)
    36  }
    37  
    38  func TestGenesisState(t *testing.T) {
    39  	simapp, ctx := app.CreateTestInput()
    40  
    41  	params := simapp.LiquidityKeeper.GetParams(ctx)
    42  	paramsDefault := simapp.LiquidityKeeper.GetParams(ctx)
    43  	genesis := types.DefaultGenesisState()
    44  
    45  	invalidDenom := "invalid denom---"
    46  	invalidDenomErrMsg := fmt.Sprintf("invalid denom: %s", invalidDenom)
    47  	params.PoolCreationFee = sdk.Coins{sdk.Coin{Denom: invalidDenom, Amount: sdk.NewInt(0)}}
    48  	require.EqualError(t, params.Validate(), invalidDenomErrMsg)
    49  
    50  	params = simapp.LiquidityKeeper.GetParams(ctx)
    51  	params.SwapFeeRate = sdk.NewDec(-1)
    52  	negativeSwapFeeErrMsg := fmt.Sprintf("swap fee rate must not be negative: %s", params.SwapFeeRate)
    53  	genesisState := types.NewGenesisState(params, genesis.PoolRecords)
    54  	require.EqualError(t, types.ValidateGenesis(*genesisState), negativeSwapFeeErrMsg)
    55  
    56  	// define test denom X, Y for Liquidity Pool
    57  	denomX, denomY := types.AlphabeticalDenomPair(DenomX, DenomY)
    58  	X := sdk.NewInt(100_000_000)
    59  	Y := sdk.NewInt(200_000_000)
    60  
    61  	addrs := app.AddTestAddrsIncremental(simapp, ctx, 20, sdk.NewInt(10_000))
    62  	poolID := app.TestCreatePool(t, simapp, ctx, X, Y, denomX, denomY, addrs[0])
    63  
    64  	pool, found := simapp.LiquidityKeeper.GetPool(ctx, poolID)
    65  	require.True(t, found)
    66  
    67  	poolCoins := simapp.LiquidityKeeper.GetPoolCoinTotalSupply(ctx, pool)
    68  	app.TestDepositPool(t, simapp, ctx, sdk.NewInt(30_000_000), sdk.NewInt(20_000_000), addrs[1:2], poolID, false)
    69  
    70  	liquidity.EndBlocker(ctx, simapp.LiquidityKeeper)
    71  
    72  	poolCoinBalanceCreator := simapp.BankKeeper.GetBalance(ctx, addrs[0], pool.PoolCoinDenom)
    73  	poolCoinBalance := simapp.BankKeeper.GetBalance(ctx, addrs[1], pool.PoolCoinDenom)
    74  	require.Equal(t, sdk.NewInt(100_000), poolCoinBalance.Amount)
    75  	require.Equal(t, poolCoins.QuoRaw(10), poolCoinBalance.Amount)
    76  
    77  	balanceXRefunded := simapp.BankKeeper.GetBalance(ctx, addrs[1], denomX)
    78  	balanceYRefunded := simapp.BankKeeper.GetBalance(ctx, addrs[1], denomY)
    79  	require.Equal(t, sdk.NewInt(20000000), balanceXRefunded.Amount)
    80  	require.Equal(t, sdk.ZeroInt(), balanceYRefunded.Amount)
    81  
    82  	// next block
    83  	ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
    84  	liquidity.BeginBlocker(ctx, simapp.LiquidityKeeper)
    85  
    86  	// validate pool records
    87  	newGenesis := simapp.LiquidityKeeper.ExportGenesis(ctx)
    88  	genesisState = types.NewGenesisState(paramsDefault, newGenesis.PoolRecords)
    89  	require.NoError(t, types.ValidateGenesis(*genesisState))
    90  
    91  	pool.TypeId = 5
    92  	simapp.LiquidityKeeper.SetPool(ctx, pool)
    93  	newGenesisBrokenPool := simapp.LiquidityKeeper.ExportGenesis(ctx)
    94  	require.NoError(t, types.ValidateGenesis(*newGenesisBrokenPool))
    95  	require.Equal(t, 1, len(newGenesisBrokenPool.PoolRecords))
    96  
    97  	err := simapp.LiquidityKeeper.ValidatePoolRecord(ctx, newGenesisBrokenPool.PoolRecords[0])
    98  	require.ErrorIs(t, err, types.ErrPoolTypeNotExists)
    99  
   100  	// not initialized genState of other module (auth, bank, ... ) only liquidity module
   101  	reserveCoins := simapp.LiquidityKeeper.GetReserveCoins(ctx, pool)
   102  	require.Equal(t, 2, len(reserveCoins))
   103  	simapp2 := app.Setup(false)
   104  	ctx2 := simapp2.BaseApp.NewContext(false, tmproto.Header{})
   105  	require.Panics(t, func() {
   106  		simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis)
   107  	})
   108  	require.Panics(t, func() {
   109  		app.SaveAccount(simapp2, ctx, pool.GetReserveAccount(), reserveCoins)
   110  		simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis)
   111  	})
   112  	require.Panics(t, func() {
   113  		app.SaveAccount(simapp2, ctx, addrs[0], sdk.Coins{poolCoinBalanceCreator})
   114  		simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis)
   115  	})
   116  	require.Panics(t, func() {
   117  		app.SaveAccount(simapp2, ctx2, addrs[1], sdk.Coins{poolCoinBalance})
   118  		simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis)
   119  	})
   120  
   121  	simapp3 := app.Setup(false)
   122  	ctx3 := simapp3.BaseApp.NewContext(false, tmproto.Header{}).WithBlockHeight(ctx.BlockHeight())
   123  	require.Panics(t, func() {
   124  		simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis)
   125  	})
   126  	require.Panics(t, func() {
   127  		app.SaveAccount(simapp3, ctx, pool.GetReserveAccount(), reserveCoins)
   128  		simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis)
   129  	})
   130  	require.Panics(t, func() {
   131  		app.SaveAccount(simapp3, ctx, addrs[0], sdk.Coins{poolCoinBalanceCreator})
   132  		simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis)
   133  	})
   134  	require.Panics(t, func() {
   135  		app.SaveAccount(simapp3, ctx3, addrs[1], sdk.Coins{poolCoinBalance})
   136  		simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis)
   137  	})
   138  }