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  }