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

     1  //go:build ignore
     2  
     3  package dex
     4  
     5  import (
     6  	"fmt"
     7  	"testing"
     8  	"time"
     9  
    10  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    11  	"github.com/fibonacci-chain/fbc/x/dex/types"
    12  	ordertypes "github.com/fibonacci-chain/fbc/x/order/types"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestInitGenesis(t *testing.T) {
    17  	_, _, _, keeper, ctx := getMockTestCaseEvn(t)
    18  
    19  	keeper.SetParams(ctx, *types.DefaultParams())
    20  	params := keeper.GetParams(ctx)
    21  
    22  	var tokenPairs []*types.TokenPair
    23  	tokenPair := GetBuiltInTokenPair()
    24  	tokenPairs = append(tokenPairs, tokenPair)
    25  
    26  	var operators DEXOperators
    27  	operators = append(operators, types.DEXOperator{
    28  		Address:            tokenPair.Owner,
    29  		HandlingFeeAddress: tokenPair.Owner,
    30  		Website:            "http://www.fbchain.org/operator.json",
    31  		InitHeight:         100,
    32  	})
    33  
    34  	var withdrawInfos []WithdrawInfo
    35  	now := time.Now()
    36  	withdrawInfos = append(withdrawInfos, types.WithdrawInfo{
    37  		Owner:        tokenPair.Owner,
    38  		Deposits:     sdk.NewInt64DecCoin(tokenPair.BaseAssetSymbol, 1234),
    39  		CompleteTime: now.Add(types.DefaultWithdrawPeriod),
    40  	})
    41  
    42  	lock := &ordertypes.ProductLock{
    43  		BlockHeight:  666,
    44  		Price:        sdk.NewDec(77),
    45  		Quantity:     sdk.NewDec(88),
    46  		BuyExecuted:  sdk.NewDec(99),
    47  		SellExecuted: sdk.NewDec(66),
    48  	}
    49  	lockMap := ordertypes.NewProductLockMap()
    50  	product := fmt.Sprintf("%s_%s", tokenPair.BaseAssetSymbol, tokenPair.QuoteAssetSymbol)
    51  	lockMap.Data[product] = lock
    52  
    53  	initGenesis := GenesisState{
    54  		Params:         params,
    55  		TokenPairs:     tokenPairs,
    56  		WithdrawInfos:  withdrawInfos,
    57  		ProductLocks:   *lockMap,
    58  		Operators:      operators,
    59  		MaxTokenPairID: 10,
    60  	}
    61  	require.NoError(t, ValidateGenesis(initGenesis))
    62  	InitGenesis(ctx, keeper, initGenesis)
    63  	require.Equal(t, initGenesis.Params, keeper.GetParams(ctx))
    64  	require.Equal(t, initGenesis.TokenPairs, keeper.GetTokenPairs(ctx))
    65  	require.Equal(t, initGenesis.MaxTokenPairID, keeper.GetMaxTokenPairID(ctx))
    66  	require.Equal(t, initGenesis.ProductLocks, *keeper.LoadProductLocks(ctx))
    67  	require.Equal(t, initGenesis.TokenPairs, keeper.GetUserTokenPairs(ctx, initGenesis.TokenPairs[0].Owner))
    68  
    69  	var exportWithdrawInfos WithdrawInfos
    70  	keeper.IterateWithdrawInfo(ctx, func(_ int64, withdrawInfo WithdrawInfo) (stop bool) {
    71  		exportWithdrawInfos = append(exportWithdrawInfos, withdrawInfo)
    72  		return false
    73  	})
    74  	require.True(t, initGenesis.WithdrawInfos.Equal(exportWithdrawInfos))
    75  
    76  	var addr sdk.AccAddress
    77  	keeper.IterateWithdrawAddress(ctx, initGenesis.WithdrawInfos[0].CompleteTime,
    78  		func(_ int64, key []byte) (stop bool) {
    79  			_, addr = types.SplitWithdrawTimeKey(key)
    80  			return false
    81  		})
    82  	require.Equal(t, initGenesis.WithdrawInfos[0].Owner, addr)
    83  
    84  	exportGenesis := ExportGenesis(ctx, keeper)
    85  	require.Equal(t, initGenesis.Params, exportGenesis.Params)
    86  	require.Equal(t, initGenesis.TokenPairs, exportGenesis.TokenPairs)
    87  	require.True(t, initGenesis.WithdrawInfos.Equal(exportGenesis.WithdrawInfos))
    88  	require.Equal(t, initGenesis.ProductLocks, exportGenesis.ProductLocks)
    89  	require.Equal(t, initGenesis.MaxTokenPairID, exportGenesis.MaxTokenPairID)
    90  
    91  	exportGenesis.Params.WithdrawPeriod = 55555
    92  	exportGenesis.TokenPairs[0].ID = 66666
    93  	exportGenesis.WithdrawInfos[0].CompleteTime = now.Add(2 * types.DefaultWithdrawPeriod)
    94  	exportGenesis.ProductLocks.Data[product].BlockHeight = 123
    95  	exportGenesis.MaxTokenPairID = 100
    96  
    97  	_, _, _, newKeeper, newCtx := getMockTestCaseEvn(t)
    98  	require.NoError(t, ValidateGenesis(exportGenesis))
    99  	InitGenesis(newCtx, newKeeper, exportGenesis)
   100  	require.Equal(t, exportGenesis.Params, newKeeper.GetParams(newCtx))
   101  	require.Equal(t, exportGenesis.TokenPairs, newKeeper.GetTokenPairs(newCtx))
   102  	require.Equal(t, exportGenesis.TokenPairs[0].ID, newKeeper.GetMaxTokenPairID(newCtx))
   103  	require.Equal(t, exportGenesis.ProductLocks, *newKeeper.LoadProductLocks(newCtx))
   104  	require.Equal(t, exportGenesis.TokenPairs, newKeeper.GetUserTokenPairs(newCtx, exportGenesis.TokenPairs[0].Owner))
   105  
   106  	var exportWithdrawInfos1 WithdrawInfos
   107  	newKeeper.IterateWithdrawInfo(newCtx, func(_ int64, withdrawInfo WithdrawInfo) (stop bool) {
   108  		exportWithdrawInfos1 = append(exportWithdrawInfos1, withdrawInfo)
   109  		return false
   110  	})
   111  	require.True(t, exportGenesis.WithdrawInfos.Equal(exportWithdrawInfos1))
   112  
   113  	var addr1 sdk.AccAddress
   114  	newKeeper.IterateWithdrawAddress(newCtx, exportGenesis.WithdrawInfos[0].CompleteTime,
   115  		func(_ int64, key []byte) (stop bool) {
   116  			_, addr1 = types.SplitWithdrawTimeKey(key)
   117  			return false
   118  		})
   119  	require.Equal(t, exportGenesis.WithdrawInfos[0].Owner, addr1)
   120  
   121  	newExportGenesis := ExportGenesis(newCtx, newKeeper)
   122  	require.Equal(t, newExportGenesis.Params, newKeeper.GetParams(newCtx))
   123  	require.Equal(t, newExportGenesis.TokenPairs, newKeeper.GetTokenPairs(newCtx))
   124  	require.Equal(t, newExportGenesis.MaxTokenPairID, newKeeper.GetMaxTokenPairID(newCtx))
   125  	var newExportWithdrawInfos WithdrawInfos
   126  	newKeeper.IterateWithdrawInfo(newCtx, func(_ int64, withdrawInfo WithdrawInfo) (stop bool) {
   127  		newExportWithdrawInfos = append(newExportWithdrawInfos, withdrawInfo)
   128  		return false
   129  	})
   130  	require.True(t, newExportGenesis.WithdrawInfos.Equal(newExportWithdrawInfos))
   131  	require.Equal(t, newExportGenesis.ProductLocks, *newKeeper.LoadProductLocks(newCtx))
   132  }