github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/keeper/querier_test.go (about)

     1  //go:build ignore
     2  
     3  package keeper
     4  
     5  import (
     6  	"testing"
     7  
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/fibonacci-chain/fbc/x/dex"
    13  	"github.com/fibonacci-chain/fbc/x/order/types"
    14  )
    15  
    16  func TestQueryOrder(t *testing.T) {
    17  	testInput := CreateTestInput(t)
    18  	keeper := testInput.OrderKeeper
    19  	ctx := testInput.Ctx
    20  	querier := NewQuerier(keeper)
    21  
    22  	tokenPair := dex.GetBuiltInTokenPair()
    23  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
    24  	require.Nil(t, err)
    25  
    26  	orderID1 := "abc"
    27  	order1 := mockOrder(orderID1, types.TestTokenPair, types.BuyOrder, "0.5", "1.1")
    28  	keeper.SetOrder(ctx, orderID1, order1)
    29  
    30  	path := []string{types.QueryOrderDetail, orderID1}
    31  	BytesOrder, err := querier(ctx, path, abci.RequestQuery{})
    32  	require.Nil(t, err)
    33  	order2 := &types.Order{}
    34  	err2 := keeper.cdc.UnmarshalJSON(BytesOrder, order2)
    35  	require.Nil(t, err2)
    36  	require.EqualValues(t, order1.String(), order2.String())
    37  
    38  	// Test query not-existed order
    39  	path = []string{types.QueryOrderDetail, "Non-existedID"}
    40  	_, err = querier(ctx, path, abci.RequestQuery{})
    41  	require.NotNil(t, err)
    42  }
    43  
    44  func TestQueryDepthBookV2(t *testing.T) {
    45  	testInput := CreateTestInput(t)
    46  	keeper := testInput.OrderKeeper
    47  	ctx := testInput.Ctx
    48  	querier := NewQuerier(keeper)
    49  
    50  	tokenPair := dex.GetBuiltInTokenPair()
    51  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
    52  	require.Nil(t, err)
    53  
    54  	depthBook := &types.DepthBook{}
    55  	product := types.TestTokenPair
    56  	order1 := mockOrder("", product, types.SellOrder, "0.6", "1.1")
    57  	depthBook.InsertOrder(order1)
    58  	depthBook.InsertOrder(order1)
    59  	order2 := mockOrder("", product, types.SellOrder, "0.5", "1.2")
    60  	depthBook.InsertOrder(order2)
    61  	order3 := mockOrder("", product, types.BuyOrder, "0.4", "1.3")
    62  	depthBook.InsertOrder(order3)
    63  	order4 := mockOrder("", product, types.BuyOrder, "0.3", "1.4")
    64  	depthBook.InsertOrder(order4)
    65  	depthBook.InsertOrder(order4)
    66  	keeper.StoreDepthBook(ctx, product, depthBook)
    67  
    68  	// Default query
    69  	path := []string{types.QueryDepthBookV2}
    70  	params := NewQueryDepthBookParams(product, 0)
    71  	data := keeper.cdc.MustMarshalJSON(params)
    72  	req := abci.RequestQuery{
    73  		Data: data,
    74  	}
    75  	bookResBytes, err := querier(ctx, path, req)
    76  	require.Nil(t, err)
    77  	require.NotNil(t, bookResBytes)
    78  	//bookRes := &BookRes{}
    79  	//keeper.cdc.MustUnmarshalJSON(bookResBytes, bookRes)
    80  	//expectBookRes := &BookRes{
    81  	//	Asks: []BookResItem{
    82  	//		{sdk.MustNewDecFromStr("0.5").String(), sdk.MustNewDecFromStr("1.2").String()},
    83  	//		{sdk.MustNewDecFromStr("0.6").String(), sdk.MustNewDecFromStr("2.2").String()},
    84  	//	},
    85  	//	Bids: []BookResItem{
    86  	//		{sdk.MustNewDecFromStr("0.4").String(), sdk.MustNewDecFromStr("1.3").String()},
    87  	//		{sdk.MustNewDecFromStr("0.3").String(), sdk.MustNewDecFromStr("2.8").String()},
    88  	//	},
    89  	//}
    90  	//require.EqualValues(t, expectBookRes, bookRes)
    91  }
    92  
    93  func TestQueryDepthBook(t *testing.T) {
    94  	testInput := CreateTestInput(t)
    95  	keeper := testInput.OrderKeeper
    96  	ctx := testInput.Ctx
    97  	querier := NewQuerier(keeper)
    98  
    99  	tokenPair := dex.GetBuiltInTokenPair()
   100  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
   101  	require.Nil(t, err)
   102  
   103  	depthBook := &types.DepthBook{}
   104  	product := types.TestTokenPair
   105  	order1 := mockOrder("", product, types.SellOrder, "0.6", "1.1")
   106  	depthBook.InsertOrder(order1)
   107  	depthBook.InsertOrder(order1)
   108  	order2 := mockOrder("", product, types.SellOrder, "0.5", "1.2")
   109  	depthBook.InsertOrder(order2)
   110  	order3 := mockOrder("", product, types.BuyOrder, "0.4", "1.3")
   111  	depthBook.InsertOrder(order3)
   112  	order4 := mockOrder("", product, types.BuyOrder, "0.3", "1.4")
   113  	depthBook.InsertOrder(order4)
   114  	depthBook.InsertOrder(order4)
   115  	keeper.StoreDepthBook(ctx, product, depthBook)
   116  
   117  	// Default query
   118  	path := []string{types.QueryDepthBook}
   119  	params := NewQueryDepthBookParams(product, 0)
   120  	data := keeper.cdc.MustMarshalJSON(params)
   121  	req := abci.RequestQuery{
   122  		Data: data,
   123  	}
   124  	bookResBytes, err := querier(ctx, path, req)
   125  	require.Nil(t, err)
   126  	bookRes := &BookRes{}
   127  	keeper.cdc.MustUnmarshalJSON(bookResBytes, bookRes)
   128  	expectBookRes := &BookRes{
   129  		Asks: []BookResItem{
   130  			{sdk.MustNewDecFromStr("0.5").String(), sdk.MustNewDecFromStr("1.2").String()},
   131  			{sdk.MustNewDecFromStr("0.6").String(), sdk.MustNewDecFromStr("2.2").String()},
   132  		},
   133  		Bids: []BookResItem{
   134  			{sdk.MustNewDecFromStr("0.4").String(), sdk.MustNewDecFromStr("1.3").String()},
   135  			{sdk.MustNewDecFromStr("0.3").String(), sdk.MustNewDecFromStr("2.8").String()},
   136  		},
   137  	}
   138  	require.EqualValues(t, expectBookRes, bookRes)
   139  
   140  	// limit size
   141  	params = NewQueryDepthBookParams(product, 1)
   142  	data = keeper.cdc.MustMarshalJSON(params)
   143  	req = abci.RequestQuery{
   144  		Data: data,
   145  	}
   146  	bookResBytes, err = querier(ctx, path, req)
   147  	require.Nil(t, err)
   148  	bookRes = &BookRes{}
   149  	keeper.cdc.MustUnmarshalJSON(bookResBytes, bookRes)
   150  	expectBookRes = &BookRes{
   151  		Asks: []BookResItem{
   152  			{sdk.MustNewDecFromStr("0.5").String(), sdk.MustNewDecFromStr("1.2").String()},
   153  		},
   154  		Bids: []BookResItem{
   155  			{sdk.MustNewDecFromStr("0.4").String(), sdk.MustNewDecFromStr("1.3").String()},
   156  		},
   157  	}
   158  	require.EqualValues(t, expectBookRes, bookRes)
   159  
   160  	// invalid request
   161  	req = abci.RequestQuery{
   162  		Data: nil,
   163  	}
   164  	_, err = querier(ctx, path, req)
   165  	require.NotNil(t, err)
   166  
   167  	// invalid product
   168  	params = NewQueryDepthBookParams("invalid_product", 0)
   169  	data = keeper.cdc.MustMarshalJSON(params)
   170  	req = abci.RequestQuery{
   171  		Data: data,
   172  	}
   173  	_, err = querier(ctx, path, req)
   174  	require.NotNil(t, err)
   175  
   176  	path = []string{types.QueryDepthBookV2}
   177  	bookResBytes, err = querier(ctx, path, req)
   178  	require.Nil(t, err)
   179  	require.NotNil(t, bookResBytes)
   180  }
   181  
   182  func TestQueryStore(t *testing.T) {
   183  	testInput := CreateTestInput(t)
   184  	keeper := testInput.OrderKeeper
   185  	ctx := testInput.Ctx
   186  	querier := NewQuerier(keeper)
   187  
   188  	tokenPair := dex.GetBuiltInTokenPair()
   189  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
   190  	require.Nil(t, err)
   191  
   192  	product := types.TestTokenPair
   193  	orders := []*types.Order{
   194  		mockOrder("", product, types.SellOrder, "0.6", "1.1"),
   195  		mockOrder("", product, types.SellOrder, "0.5", "1.2"),
   196  		mockOrder("", product, types.BuyOrder, "0.4", "1.3"),
   197  		mockOrder("", product, types.BuyOrder, "0.3", "1.4"),
   198  	}
   199  	for i := 0; i < 4; i++ {
   200  		orders[i].Sender = testInput.TestAddrs[0]
   201  		err := keeper.PlaceOrder(ctx, orders[i])
   202  		require.NoError(t, err)
   203  	}
   204  	keeper.Cache2Disk(ctx)
   205  
   206  	// Default query
   207  	path := []string{types.QueryStore}
   208  	bz, err := querier(ctx, path, abci.RequestQuery{})
   209  	require.Nil(t, err)
   210  	ss := &StoreStatistic{}
   211  	keeper.cdc.MustUnmarshalJSON(bz, ss)
   212  	require.EqualValues(t, 4, ss.StoreOrderNum)
   213  	require.EqualValues(t, 4, ss.DepthBookNum[product])
   214  
   215  	keeper.SetLastPrice(ctx, product, sdk.MustNewDecFromStr("1.5"))
   216  	keeper.DumpStore(ctx)
   217  
   218  	path = []string{types.QueryDepthBookV2}
   219  	_, sdkErr := querier(ctx, path, abci.RequestQuery{})
   220  	require.NotNil(t, sdkErr)
   221  }
   222  
   223  func TestQueryParameters(t *testing.T) {
   224  	testInput := CreateTestInput(t)
   225  	keeper := testInput.OrderKeeper
   226  	ctx := testInput.Ctx
   227  	querier := NewQuerier(keeper)
   228  
   229  	params := &types.Params{
   230  		OrderExpireBlocks:     1000,
   231  		MaxDealsPerBlock:      10000,
   232  		FeePerBlock:           sdk.NewDecCoinFromDec(types.DefaultFeeDenomPerBlock, sdk.NewDec(1)),
   233  		TradeFeeRate:          sdk.MustNewDecFromStr("0.001"),
   234  		NewOrderMsgGasUnit:    1,
   235  		CancelOrderMsgGasUnit: 1,
   236  	}
   237  	keeper.SetParams(ctx, params)
   238  	path := []string{types.QueryParameters}
   239  	byteRes, err := querier(ctx, path, abci.RequestQuery{})
   240  	require.Nil(t, err)
   241  	res := &types.Params{}
   242  	err2 := keeper.cdc.UnmarshalJSON(byteRes, res)
   243  	require.Nil(t, err2)
   244  	require.EqualValues(t, params, res)
   245  }
   246  
   247  func TestQueryInvalidPath(t *testing.T) {
   248  	testInput := CreateTestInput(t)
   249  	keeper := testInput.OrderKeeper
   250  	ctx := testInput.Ctx
   251  	querier := NewQuerier(keeper)
   252  
   253  	path := []string{"invalid-path"}
   254  	_, err := querier(ctx, path, abci.RequestQuery{})
   255  	require.NotNil(t, err)
   256  }