github.com/gravity-devs/liquidity@v1.5.3/x/liquidity/keeper/querier_test.go (about) 1 package keeper_test 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/cosmos/cosmos-sdk/codec" 9 sdk "github.com/cosmos/cosmos-sdk/types" 10 "github.com/stretchr/testify/require" 11 abci "github.com/tendermint/tendermint/abci/types" 12 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 13 14 "github.com/gravity-devs/liquidity/app" 15 "github.com/gravity-devs/liquidity/x/liquidity/keeper" 16 "github.com/gravity-devs/liquidity/x/liquidity/types" 17 ) 18 19 const custom = "custom" 20 21 func getQueriedLiquidityPool(t *testing.T, ctx sdk.Context, cdc *codec.LegacyAmino, querier sdk.Querier, poolID uint64) (types.Pool, error) { 22 query := abci.RequestQuery{ 23 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryLiquidityPool}, "/"), 24 Data: cdc.MustMarshalJSON(types.QueryLiquidityPoolParams{PoolId: poolID}), 25 } 26 27 pool := types.Pool{} 28 bz, err := querier(ctx, []string{types.QueryLiquidityPool}, query) 29 if err != nil { 30 return pool, err 31 } 32 require.Nil(t, cdc.UnmarshalJSON(bz, &pool)) 33 return pool, nil 34 } 35 36 func getQueriedLiquidityPools(t *testing.T, ctx sdk.Context, cdc *codec.LegacyAmino, querier sdk.Querier) (types.Pools, error) { 37 queryDelParams := types.NewQueryLiquidityPoolsParams(1, 100) 38 bz, errRes := cdc.MarshalJSON(queryDelParams) 39 fmt.Println(bz, errRes) 40 query := abci.RequestQuery{ 41 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryLiquidityPools}, "/"), 42 Data: bz, 43 } 44 45 pools := types.Pools{} 46 bz, err := querier(ctx, []string{types.QueryLiquidityPools}, query) 47 if err != nil { 48 return pools, err 49 } 50 require.Nil(t, cdc.UnmarshalJSON(bz, &pools)) 51 return pools, nil 52 } 53 54 func TestNewQuerier(t *testing.T) { 55 cdc := codec.NewLegacyAmino() 56 types.RegisterLegacyAminoCodec(cdc) 57 simapp := app.Setup(false) 58 ctx := simapp.BaseApp.NewContext(false, tmproto.Header{}) 59 X := sdk.NewInt(1000000000) 60 Y := sdk.NewInt(1000000000) 61 62 addrs := app.AddTestAddrsIncremental(simapp, ctx, 20, sdk.NewInt(10000)) 63 64 querier := keeper.NewQuerier(simapp.LiquidityKeeper, cdc) 65 66 poolID := app.TestCreatePool(t, simapp, ctx, X, Y, DenomX, DenomY, addrs[0]) 67 query := abci.RequestQuery{ 68 Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryLiquidityPool}, "/"), 69 Data: cdc.MustMarshalJSON(types.QueryLiquidityPoolParams{PoolId: poolID}), 70 } 71 queryFailCase := abci.RequestQuery{ 72 Path: strings.Join([]string{"failCustom", "failRoute", "failQuery"}, "/"), 73 Data: cdc.MustMarshalJSON(types.Pool{}), 74 } 75 pool := types.Pool{} 76 bz, err := querier(ctx, []string{types.QueryLiquidityPool}, query) 77 require.NoError(t, err) 78 require.Nil(t, cdc.UnmarshalJSON(bz, &pool)) 79 80 bz, err = querier(ctx, []string{"fail"}, queryFailCase) 81 require.EqualError(t, err, "unknown query path of liquidity module: fail: unknown request") 82 err = cdc.UnmarshalJSON(bz, &pool) 83 require.EqualError(t, err, "UnmarshalJSON cannot decode empty bytes") 84 } 85 86 func TestQueries(t *testing.T) { 87 cdc := codec.NewLegacyAmino() 88 types.RegisterLegacyAminoCodec(cdc) 89 90 simapp := app.Setup(false) 91 ctx := simapp.BaseApp.NewContext(false, tmproto.Header{}) 92 93 // define test denom X, Y for Liquidity Pool 94 denomX, denomY := types.AlphabeticalDenomPair(DenomX, DenomY) 95 //denoms := []string{denomX, denomY} 96 97 X := sdk.NewInt(1000000000) 98 Y := sdk.NewInt(1000000000) 99 100 addrs := app.AddTestAddrsIncremental(simapp, ctx, 20, sdk.NewInt(10000)) 101 102 poolID := app.TestCreatePool(t, simapp, ctx, X, Y, denomX, denomY, addrs[0]) 103 poolId2 := app.TestCreatePool(t, simapp, ctx, X, Y, denomX, "testDenom", addrs[0]) 104 require.Equal(t, uint64(1), poolID) 105 require.Equal(t, uint64(2), poolId2) 106 107 // begin block, init 108 app.TestDepositPool(t, simapp, ctx, X, Y, addrs[1:10], poolID, true) 109 110 querier := keeper.NewQuerier(simapp.LiquidityKeeper, cdc) 111 112 require.Equal(t, uint64(1), poolID) 113 poolRes, err := getQueriedLiquidityPool(t, ctx, cdc, querier, poolID) 114 require.NoError(t, err) 115 require.Equal(t, poolID, poolRes.Id) 116 require.Equal(t, types.DefaultPoolTypeID, poolRes.TypeId) 117 require.Equal(t, []string{DenomX, DenomY}, poolRes.ReserveCoinDenoms) 118 require.NotNil(t, poolRes.PoolCoinDenom) 119 require.NotNil(t, poolRes.ReserveAccountAddress) 120 121 poolResEmpty, err := getQueriedLiquidityPool(t, ctx, cdc, querier, uint64(3)) 122 require.ErrorIs(t, err, types.ErrPoolNotExists) 123 require.Equal(t, uint64(0), poolResEmpty.Id) 124 125 poolsRes, err := getQueriedLiquidityPools(t, ctx, cdc, querier) 126 require.NoError(t, err) 127 require.Equal(t, 2, len(poolsRes)) 128 129 }