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

     1  //go:build ignore
     2  
     3  package order
     4  
     5  import (
     6  	"fmt"
     7  	"testing"
     8  
     9  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	"github.com/fibonacci-chain/fbc/libs/tendermint/types/time"
    11  	"github.com/fibonacci-chain/fbc/x/common"
    12  	"github.com/fibonacci-chain/fbc/x/dex"
    13  	"github.com/fibonacci-chain/fbc/x/order/keeper"
    14  	"github.com/fibonacci-chain/fbc/x/order/types"
    15  	"github.com/stretchr/testify/require"
    16  )
    17  
    18  func TestValidateGenesis(t *testing.T) {
    19  	genesisState := DefaultGenesisState()
    20  	err := ValidateGenesis(genesisState)
    21  	require.NoError(t, err)
    22  }
    23  
    24  func TestExportGenesis(t *testing.T) {
    25  	testInput := keeper.CreateTestInput(t)
    26  	ctx := testInput.Ctx
    27  	orderKeeper := testInput.OrderKeeper
    28  
    29  	params := types.DefaultParams()
    30  	params.OrderExpireBlocks = 1234
    31  	params.MaxDealsPerBlock = 2345
    32  
    33  	tokenPair := dex.GetBuiltInTokenPair()
    34  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
    35  	require.NoError(t, err)
    36  	product := fmt.Sprintf("%s_%s", tokenPair.BaseAssetSymbol, tokenPair.QuoteAssetSymbol)
    37  
    38  	var orders []*types.Order
    39  	order1 := types.NewOrder("txHash",
    40  		testInput.TestAddrs[0],
    41  		product,
    42  		types.SellOrder,
    43  		sdk.NewDec(123),
    44  		sdk.NewDec(456),
    45  		time.Now().Unix(),
    46  		5,
    47  		sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1)))
    48  	order1.OrderID = types.FormatOrderID(10, 1)
    49  	order1.FilledAvgPrice = sdk.ZeroDec()
    50  
    51  	orders = append(orders, order1)
    52  
    53  	initGenesis := GenesisState{
    54  		Params:     params,
    55  		OpenOrders: orders,
    56  	}
    57  
    58  	InitGenesis(ctx, orderKeeper, initGenesis)
    59  	require.Equal(t, params, *orderKeeper.GetParams(ctx))
    60  	// 0x11
    61  	require.Equal(t, order1, orderKeeper.GetOrder(ctx, order1.OrderID))
    62  	// 0x12
    63  	depthBook := &types.DepthBook{}
    64  	depthBook.InsertOrder(initGenesis.OpenOrders[0])
    65  	require.Equal(t, depthBook, orderKeeper.GetDepthBookFromDB(ctx, product))
    66  	// 0x13
    67  	key1 := types.FormatOrderIDsKey(product, initGenesis.OpenOrders[0].Price, initGenesis.OpenOrders[0].Side)
    68  	require.Equal(t, []string{initGenesis.OpenOrders[0].OrderID}, orderKeeper.GetProductPriceOrderIDsFromDB(ctx, key1))
    69  	// 0x14
    70  	require.Equal(t, tokenPair.InitPrice, orderKeeper.GetLastPrice(ctx, product))
    71  	// 0x15
    72  	require.Equal(t, []int64{10}, orderKeeper.GetExpireBlockHeight(ctx, initGenesis.Params.OrderExpireBlocks+10))
    73  	// 0x16
    74  	require.Equal(t, int64(1), orderKeeper.GetBlockOrderNum(ctx, 10))
    75  	// 0x17
    76  	require.Equal(t, 0, len(orderKeeper.GetLastClosedOrderIDs(ctx)))
    77  	// 0x18
    78  	require.Equal(t, int64(0), orderKeeper.GetLastExpiredBlockHeight(ctx))
    79  	// 0x19
    80  	require.Equal(t, int64(1), orderKeeper.GetOpenOrderNum(ctx))
    81  	// 0x20
    82  	require.Equal(t, int64(1), orderKeeper.GetStoreOrderNum(ctx))
    83  
    84  	exportGenesis := ExportGenesis(ctx, orderKeeper)
    85  	require.Equal(t, params, exportGenesis.Params)
    86  	require.Equal(t, order1, exportGenesis.OpenOrders[0])
    87  
    88  	params.MaxDealsPerBlock = 1
    89  	params.FeePerBlock = sdk.NewDecCoinFromDec(common.NativeToken, sdk.OneDec())
    90  	params.TradeFeeRate = sdk.NewDecWithPrec(5, 2)
    91  	params.OrderExpireBlocks = 3333
    92  	orderKeeper.SetParams(ctx, &params)
    93  
    94  	order2 := types.NewOrder("txHash",
    95  		testInput.TestAddrs[0],
    96  		product,
    97  		types.BuyOrder,
    98  		sdk.NewDec(2),
    99  		sdk.NewDec(5),
   100  		time.Now().Unix(),
   101  		5,
   102  		sdk.NewDecCoinFromDec(types.DefaultFeeDenomPerBlock, sdk.NewDec(1)))
   103  	order2.FilledAvgPrice = sdk.ZeroDec()
   104  	ctx.SetBlockHeight(1000)
   105  	err = orderKeeper.PlaceOrder(ctx, order2)
   106  	require.NoError(t, err)
   107  	orderKeeper.Cache2Disk(ctx)
   108  
   109  	exportGenesis = ExportGenesis(ctx, orderKeeper)
   110  	require.Equal(t, params, exportGenesis.Params)
   111  	require.Equal(t, order1, orderKeeper.GetOrder(ctx, order1.OrderID))
   112  	require.Equal(t, order2, orderKeeper.GetOrder(ctx, order2.OrderID))
   113  	require.Equal(t, orderKeeper.GetOrder(ctx, exportGenesis.OpenOrders[0].OrderID), exportGenesis.OpenOrders[0])
   114  	require.Equal(t, orderKeeper.GetOrder(ctx, exportGenesis.OpenOrders[1].OrderID), exportGenesis.OpenOrders[1])
   115  
   116  	newTestInput := keeper.CreateTestInput(t)
   117  	newCtx := newTestInput.Ctx
   118  	newOrderKeeper := newTestInput.OrderKeeper
   119  	err = newTestInput.DexKeeper.SaveTokenPair(newCtx, tokenPair)
   120  	require.NoError(t, err)
   121  	InitGenesis(newCtx, newOrderKeeper, exportGenesis)
   122  	require.Equal(t, exportGenesis.Params, *newOrderKeeper.GetParams(newCtx))
   123  	// 0x11
   124  	require.Equal(t, order1, newOrderKeeper.GetOrder(newCtx, order1.OrderID))
   125  	require.Equal(t, order2, newOrderKeeper.GetOrder(newCtx, order2.OrderID))
   126  	// 0x12
   127  	depthBook = &types.DepthBook{}
   128  	depthBook.InsertOrder(exportGenesis.OpenOrders[0])
   129  	depthBook.InsertOrder(exportGenesis.OpenOrders[1])
   130  	require.Equal(t, depthBook, newOrderKeeper.GetDepthBookFromDB(newCtx, product))
   131  	// 0x13
   132  	key1 = types.FormatOrderIDsKey(product, exportGenesis.OpenOrders[0].Price, exportGenesis.OpenOrders[0].Side)
   133  	key2 := types.FormatOrderIDsKey(product, exportGenesis.OpenOrders[1].Price, exportGenesis.OpenOrders[1].Side)
   134  	require.Equal(t, []string{exportGenesis.OpenOrders[0].OrderID}, newOrderKeeper.GetProductPriceOrderIDsFromDB(newCtx, key1))
   135  	require.Equal(t, []string{exportGenesis.OpenOrders[1].OrderID}, newOrderKeeper.GetProductPriceOrderIDsFromDB(newCtx, key2))
   136  	// 0x14
   137  	require.Equal(t, tokenPair.InitPrice, newOrderKeeper.GetLastPrice(newCtx, product))
   138  	// 0x15
   139  	require.Equal(t, []int64{10}, newOrderKeeper.GetExpireBlockHeight(newCtx, exportGenesis.Params.OrderExpireBlocks+10))
   140  	require.Equal(t, []int64{1000}, newOrderKeeper.GetExpireBlockHeight(newCtx, exportGenesis.Params.OrderExpireBlocks+1000))
   141  	// 0x16
   142  	require.Equal(t, int64(1), newOrderKeeper.GetBlockOrderNum(newCtx, 10))
   143  	require.Equal(t, int64(1), newOrderKeeper.GetBlockOrderNum(newCtx, 1000))
   144  	// 0x17
   145  	require.Equal(t, 0, len(newOrderKeeper.GetLastClosedOrderIDs(newCtx)))
   146  	// 0x18
   147  	require.Equal(t, int64(0), newOrderKeeper.GetLastExpiredBlockHeight(newCtx))
   148  	// 0x19
   149  	require.Equal(t, int64(2), newOrderKeeper.GetOpenOrderNum(newCtx))
   150  	// 0x20
   151  	require.Equal(t, int64(2), newOrderKeeper.GetStoreOrderNum(newCtx))
   152  }