github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/keeper/order_map_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  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/fibonacci-chain/fbc/x/dex"
    12  	"github.com/fibonacci-chain/fbc/x/order/types"
    13  )
    14  
    15  func TestOrderIDsMapInsertAndRemove(t *testing.T) {
    16  	testInput := CreateTestInput(t)
    17  	keeper := testInput.OrderKeeper
    18  	ctx := testInput.Ctx
    19  
    20  	orderIDsMap := keeper.diskCache.orderIDsMap
    21  
    22  	// Test insert to same key
    23  	order1 := mockOrder("ID1-1", types.TestTokenPair, types.BuyOrder, "0.5", "1.1")
    24  	order2 := mockOrder("ID1-2", types.TestTokenPair, types.BuyOrder, "0.5", "1.2")
    25  	keeper.GetDiskCache().insertOrder(order1)
    26  	keeper.GetDiskCache().insertOrder(order2)
    27  	key1 := types.FormatOrderIDsKey(order1.Product, order1.Price, order1.Side)
    28  	require.EqualValues(t, 1, len(orderIDsMap.Data))
    29  	require.EqualValues(t, "ID1-1", orderIDsMap.Data[key1][0])
    30  	require.EqualValues(t, "ID1-2", orderIDsMap.Data[key1][1])
    31  
    32  	// Test insert to different key
    33  	order3 := mockOrder("ID1-3", types.TestTokenPair, types.SellOrder, "0.5", "1.3")
    34  	keeper.GetDiskCache().insertOrder(order3)
    35  	key2 := types.FormatOrderIDsKey(order3.Product, order3.Price, order3.Side)
    36  	require.EqualValues(t, 2, len(orderIDsMap.Data))
    37  	require.EqualValues(t, "ID1-3", orderIDsMap.Data[key2][0])
    38  
    39  	// check update keys
    40  	updatedItemKeys := keeper.GetDiskCache().GetUpdatedOrderIDKeys()
    41  	require.Equal(t, 2, len(updatedItemKeys))
    42  	require.Equal(t, key1, updatedItemKeys[0])
    43  	require.Equal(t, key2, updatedItemKeys[1])
    44  	keeper.Cache2Disk(ctx)
    45  
    46  	// Test Remove
    47  	keeper.GetDiskCache().removeOrder(order1)
    48  	require.EqualValues(t, "ID1-2", orderIDsMap.Data[key1][0])
    49  	// check update keys
    50  	updatedItemKeys = keeper.GetDiskCache().GetUpdatedOrderIDKeys()
    51  	require.Equal(t, 2, len(updatedItemKeys))
    52  	require.Equal(t, key1, updatedItemKeys[0])
    53  
    54  	// remove all
    55  	keeper.GetDiskCache().removeOrder(order2)
    56  	keeper.GetDiskCache().removeOrder(order3)
    57  	require.EqualValues(t, 0, len(orderIDsMap.Data))
    58  	require.EqualValues(t, 0, len(orderIDsMap.Data[key1]))
    59  	require.EqualValues(t, 0, len(orderIDsMap.Data[key2]))
    60  }
    61  
    62  func TestRemoveOrderFromDepthBook(t *testing.T) {
    63  	testInput := CreateTestInput(t)
    64  	keeper := testInput.OrderKeeper
    65  	ctx := testInput.Ctx
    66  
    67  	tokenPair := dex.GetBuiltInTokenPair()
    68  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
    69  	require.Nil(t, err)
    70  
    71  	// mock orders, DepthBook, and orderIDsMap
    72  	orders := []*types.Order{
    73  		mockOrder("ID1-1", types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
    74  		mockOrder("ID1-2", types.TestTokenPair, types.BuyOrder, "10.1", "1.0"),
    75  		mockOrder("ID1-3", types.TestTokenPair, types.SellOrder, "10.1", "1.1"),
    76  	}
    77  	depthBook := &types.DepthBook{}
    78  
    79  	for i := 0; i < 3; i++ {
    80  		depthBook.InsertOrder(orders[i])
    81  		keeper.GetDiskCache().insertOrder(orders[i])
    82  	}
    83  	keeper.SetDepthBook(types.TestTokenPair, depthBook)
    84  	keeper.Cache2Disk(ctx)
    85  	require.Equal(t, 2, len(depthBook.Items))
    86  	require.Equal(t, sdk.MustNewDecFromStr("10.1"), depthBook.Items[0].Price)
    87  	require.Equal(t, sdk.MustNewDecFromStr("1.0"), depthBook.Items[0].BuyQuantity)
    88  	require.Equal(t, sdk.MustNewDecFromStr("1.1"), depthBook.Items[0].SellQuantity)
    89  
    90  	// remove orders[2]
    91  	keeper.RemoveOrderFromDepthBook(orders[2], types.FeeTypeOrderDeal)
    92  
    93  	// check depth book
    94  	newDepthBook := keeper.GetDepthBookCopy(types.TestTokenPair)
    95  	require.Equal(t, 2, len(newDepthBook.Items))
    96  	require.Equal(t, sdk.MustNewDecFromStr("10.1"), depthBook.Items[0].Price)
    97  	require.Equal(t, sdk.MustNewDecFromStr("1.0"), depthBook.Items[0].BuyQuantity)
    98  	require.Equal(t, sdk.ZeroDec().String(), depthBook.Items[0].SellQuantity.String())
    99  
   100  	// check orderIDsMap
   101  	keys := [3]string{}
   102  	for i := 0; i < 3; i++ {
   103  		keys[i] = types.FormatOrderIDsKey(orders[i].Product, orders[i].Price, orders[i].Side)
   104  	}
   105  	newOrderIDsMap := keeper.diskCache.GetOrderIDsMapCopy()
   106  	require.Equal(t, 2, len(newOrderIDsMap.Data))
   107  	require.Equal(t, 0, len(newOrderIDsMap.Data[keys[2]]))
   108  	require.Equal(t, "ID1-1", newOrderIDsMap.Data[keys[0]][0])
   109  	require.Equal(t, "ID1-2", newOrderIDsMap.Data[keys[1]][0])
   110  
   111  	// check update keys
   112  	updatedBookKeys := keeper.GetDiskCache().GetUpdatedDepthbookKeys()
   113  	updatedItemKeys := keeper.GetDiskCache().GetUpdatedOrderIDKeys()
   114  	require.Equal(t, 1, len(updatedBookKeys))
   115  	require.Equal(t, types.TestTokenPair, updatedBookKeys[0])
   116  	require.Equal(t, 3, len(updatedItemKeys))
   117  	require.Equal(t, keys[2], updatedItemKeys[2])
   118  }