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 }