github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/keeper/order_test.go (about) 1 //go:build ignore 2 3 package keeper 4 5 import ( 6 "testing" 7 8 "github.com/fibonacci-chain/fbc/x/dex" 9 10 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 12 "github.com/stretchr/testify/require" 13 14 "github.com/fibonacci-chain/fbc/x/common" 15 "github.com/fibonacci-chain/fbc/x/order/types" 16 token "github.com/fibonacci-chain/fbc/x/token/types" 17 ) 18 19 func TestTryPlaceOrder(t *testing.T) { 20 testInput := CreateTestInputWithBalance(t, 1, 10) 21 keeper := testInput.OrderKeeper 22 ctx := testInput.Ctx 23 24 tokenPair := dex.GetBuiltInTokenPair() 25 err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair) 26 require.Nil(t, err) 27 // mock order 28 order := mockOrder("", types.TestTokenPair, types.BuyOrder, "1.0", "10.1") 29 order.Sender = testInput.TestAddrs[0] 30 31 // not enough balance 32 _, err = keeper.TryPlaceOrder(ctx, order) 33 require.Error(t, err) 34 35 // test new order fee 36 //feeParams.NewOrder = sdk.MustNewDecFromStr("0.01") 37 order.Quantity = sdk.MustNewDecFromStr("9.0") 38 fee, err := keeper.TryPlaceOrder(ctx, order) 39 require.Nil(t, err) 40 41 order.RecordOrderNewFee(fee) 42 require.Equal(t, "0.259200000000000000"+common.NativeToken, order.GetExtraInfoWithKey(types.OrderExtraInfoKeyNewFee)) 43 44 order = mockOrder("", types.TestTokenPair, types.BuyOrder, "1.0", "9") 45 order.Sender = testInput.TestAddrs[0] 46 _, err = keeper.TryPlaceOrder(ctx, order) 47 keeper.UnlockCoins(ctx, testInput.TestAddrs[0], sdk.SysCoins{{Denom: common.NativeToken, Amount: sdk.MustNewDecFromStr("9")}}, token.LockCoinsTypeQuantity) 48 require.Error(t, err) 49 } 50 51 func TestPlaceOrderAndCancelOrder(t *testing.T) { 52 testInput := CreateTestInput(t) 53 keeper := testInput.OrderKeeper 54 ctx := testInput.Ctx.WithBlockHeight(10) 55 56 tokenPair := dex.GetBuiltInTokenPair() 57 err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair) 58 require.Nil(t, err) 59 60 order := mockOrder("", types.TestTokenPair, types.BuyOrder, "10.0", "1.0") 61 order.Sender = testInput.TestAddrs[0] 62 err = keeper.PlaceOrder(ctx, order) 63 require.Nil(t, err) 64 65 // check result & order 66 require.EqualValues(t, types.FormatOrderID(10, 1), order.OrderID) 67 require.EqualValues(t, 1, keeper.GetBlockOrderNum(ctx, 10)) 68 // check account balance 69 acc := testInput.AccountKeeper.GetAccount(ctx, testInput.TestAddrs[0]) 70 expectCoins := sdk.SysCoins{ 71 sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("89.7408")), 72 sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")), 73 } 74 require.EqualValues(t, expectCoins.String(), acc.GetCoins().String()) 75 // check depth book 76 depthBook := keeper.GetDepthBookCopy(order.Product) 77 require.Equal(t, 1, len(depthBook.Items)) 78 require.Equal(t, sdk.MustNewDecFromStr("10.0"), depthBook.Items[0].Price) 79 require.Equal(t, sdk.MustNewDecFromStr("1.0"), depthBook.Items[0].BuyQuantity) 80 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys())) 81 // check order ids map 82 orderIDsMap := keeper.GetDiskCache().GetOrderIDsMapCopy() 83 require.Equal(t, 1, len(orderIDsMap.Data)) 84 require.Equal(t, types.FormatOrderID(10, 1), 85 orderIDsMap.Data[types.FormatOrderIDsKey(order.Product, order.Price, order.Side)][0]) 86 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys())) 87 // other check 88 require.EqualValues(t, 1, keeper.diskCache.openNum) 89 require.EqualValues(t, 1, keeper.diskCache.storeOrderNum) 90 91 // Test cancel order 92 ctx.SetBlockHeight(11) 93 fee := keeper.CancelOrder(ctx, order, ctx.Logger()) 94 // check result 95 require.Equal(t, "0.000001000000000000"+common.NativeToken, fee.String()) 96 // check order status 97 require.EqualValues(t, types.OrderStatusCancelled, order.Status) 98 require.Equal(t, "", order.GetExtraInfoWithKey(types.OrderExtraInfoKeyCancelFee)) 99 // check account balance 100 acc = testInput.AccountKeeper.GetAccount(ctx, testInput.TestAddrs[0]) 101 expectCoins = sdk.SysCoins{ 102 // 100 - 0.002 103 sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("99.999999")), 104 sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")), 105 } 106 require.EqualValues(t, expectCoins.String(), acc.GetCoins().String()) 107 // check fee pool 108 feeCollector := testInput.SupplyKeeper.GetModuleAccount(ctx, auth.FeeCollectorName) 109 collectedFees := feeCollector.GetCoins() 110 require.EqualValues(t, "0.000001000000000000"+common.NativeToken, collectedFees.String()) 111 // check depth book 112 depthBook = keeper.GetDepthBookCopy(types.TestTokenPair) 113 require.EqualValues(t, 0, len(depthBook.Items)) 114 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys())) 115 // check order ids 116 key := types.FormatOrderIDsKey(types.TestTokenPair, sdk.MustNewDecFromStr("9.8"), types.BuyOrder) 117 orderIDs := keeper.GetProductPriceOrderIDs(key) 118 require.EqualValues(t, 0, len(orderIDs)) 119 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys())) 120 // check updated order ids 121 updatedOrderIDs := keeper.GetUpdatedOrderIDs() 122 require.EqualValues(t, order.OrderID, updatedOrderIDs[0]) 123 // check closed order id 124 closedOrderIDs := keeper.GetDiskCache().GetClosedOrderIDs() 125 require.Equal(t, 1, len(closedOrderIDs)) 126 require.Equal(t, order.OrderID, closedOrderIDs[0]) 127 // other check 128 require.EqualValues(t, 0, keeper.diskCache.openNum) 129 require.EqualValues(t, 1, keeper.cache.cancelNum) 130 } 131 132 func TestPlaceOrderAndExpireOrder(t *testing.T) { 133 testInput := CreateTestInput(t) 134 keeper := testInput.OrderKeeper 135 ctx := testInput.Ctx.WithBlockHeight(10) 136 137 tokenPair := dex.GetBuiltInTokenPair() 138 err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair) 139 require.Nil(t, err) 140 141 order := mockOrder("", types.TestTokenPair, types.BuyOrder, "10.0", "1.0") 142 order.Sender = testInput.TestAddrs[0] 143 err = keeper.PlaceOrder(ctx, order) 144 require.Nil(t, err) 145 146 // check result & order 147 require.EqualValues(t, types.FormatOrderID(10, 1), order.OrderID) 148 require.EqualValues(t, 1, keeper.GetBlockOrderNum(ctx, 10)) 149 // check account balance 150 acc := testInput.AccountKeeper.GetAccount(ctx, testInput.TestAddrs[0]) 151 expectCoins := sdk.SysCoins{ 152 sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("89.7408")), 153 sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")), 154 } 155 require.EqualValues(t, expectCoins.String(), acc.GetCoins().String()) 156 // check depth book 157 depthBook := keeper.GetDepthBookCopy(order.Product) 158 require.Equal(t, 1, len(depthBook.Items)) 159 require.Equal(t, sdk.MustNewDecFromStr("10.0"), depthBook.Items[0].Price) 160 require.Equal(t, sdk.MustNewDecFromStr("1.0"), depthBook.Items[0].BuyQuantity) 161 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys())) 162 // check order ids map 163 orderIDsMap := keeper.GetDiskCache().GetOrderIDsMapCopy() 164 require.Equal(t, 1, len(orderIDsMap.Data)) 165 require.Equal(t, types.FormatOrderID(10, 1), 166 orderIDsMap.Data[types.FormatOrderIDsKey(order.Product, order.Price, order.Side)][0]) 167 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys())) 168 // other check 169 require.EqualValues(t, 1, keeper.diskCache.openNum) 170 require.EqualValues(t, 1, keeper.diskCache.storeOrderNum) 171 172 // Test expire order 173 ctx.SetBlockHeight(11) 174 keeper.ExpireOrder(ctx, order, ctx.Logger()) 175 // check order status 176 require.EqualValues(t, types.OrderStatusExpired, order.Status) 177 require.Equal(t, "", order.GetExtraInfoWithKey(types.OrderExtraInfoKeyExpireFee)) 178 // check account balance 179 acc = testInput.AccountKeeper.GetAccount(ctx, testInput.TestAddrs[0]) 180 expectCoins = sdk.SysCoins{ 181 // 100 - 0.002 182 sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("99.999999")), 183 sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")), 184 } 185 require.EqualValues(t, expectCoins.String(), acc.GetCoins().String()) 186 // check fee pool 187 feeCollector := testInput.SupplyKeeper.GetModuleAccount(ctx, auth.FeeCollectorName) 188 collectedFees := feeCollector.GetCoins() 189 require.EqualValues(t, "0.000001000000000000"+common.NativeToken, collectedFees.String()) 190 // check depth book 191 depthBook = keeper.GetDepthBookCopy(types.TestTokenPair) 192 require.EqualValues(t, 0, len(depthBook.Items)) 193 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys())) 194 // check order ids 195 key := types.FormatOrderIDsKey(types.TestTokenPair, sdk.MustNewDecFromStr("9.8"), types.BuyOrder) 196 orderIDs := keeper.GetProductPriceOrderIDs(key) 197 require.EqualValues(t, 0, len(orderIDs)) 198 require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys())) 199 // check updated order ids 200 updatedOrderIDs := keeper.GetUpdatedOrderIDs() 201 require.EqualValues(t, order.OrderID, updatedOrderIDs[0]) 202 // check closed order id 203 keeper.Cache2Disk(ctx) 204 closedOrderIDs := keeper.GetLastClosedOrderIDs(ctx) 205 require.Equal(t, 1, len(closedOrderIDs)) 206 require.Equal(t, order.OrderID, closedOrderIDs[0]) 207 // other check 208 require.EqualValues(t, 0, keeper.diskCache.openNum) 209 require.EqualValues(t, 1, keeper.cache.expireNum) 210 }