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

     1  //go:build ignore
     2  
     3  package keeper
     4  
     5  import (
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/fibonacci-chain/fbc/x/common"
    10  
    11  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    12  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    13  	"github.com/fibonacci-chain/fbc/x/dex/types"
    14  	"github.com/stretchr/testify/require"
    15  	amino "github.com/tendermint/go-amino"
    16  )
    17  
    18  func TestQuerier_ProductsAndMatchOrder(t *testing.T) {
    19  
    20  	common.InitConfig()
    21  	testInput := createTestInputWithBalance(t, 1, 10000)
    22  	ctx := testInput.Ctx
    23  	addr, err := sdk.AccAddressFromBech32(types.TestTokenPairOwner)
    24  	require.Nil(t, err)
    25  	tokenPair0 := &types.TokenPair{
    26  		BaseAssetSymbol:  "bToken0",
    27  		QuoteAssetSymbol: common.NativeToken,
    28  		Owner:            addr,
    29  		Deposits:         sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(50)),
    30  		BlockHeight:      8,
    31  	}
    32  
    33  	tokenPair1 := &types.TokenPair{
    34  		BaseAssetSymbol:  "bToken1",
    35  		QuoteAssetSymbol: common.NativeToken,
    36  		Owner:            addr,
    37  		Deposits:         sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(100)),
    38  		BlockHeight:      10,
    39  	}
    40  
    41  	// SaveTokenPair
    42  	err = testInput.DexKeeper.SaveTokenPair(ctx, tokenPair0)
    43  	require.Nil(t, err)
    44  	err = testInput.DexKeeper.SaveTokenPair(ctx, tokenPair1)
    45  	require.Nil(t, err)
    46  	querier := NewQuerier(testInput.DexKeeper)
    47  
    48  	var normalPath = []string{types.QueryProducts, types.QueryMatchOrder}
    49  
    50  	for _, path := range normalPath {
    51  		// successful case
    52  		queryParams := types.NewQueryDexInfoParams(types.TestTokenPairOwner, 1, 50)
    53  		bz, err := amino.MarshalJSON(queryParams)
    54  		require.Nil(t, err)
    55  		data, err := querier(ctx, []string{path}, abci.RequestQuery{Data: bz})
    56  		require.Nil(t, err)
    57  		require.True(t, data != nil)
    58  
    59  		// error case : failed to query data because  param is nil
    60  		dataUnmarshalJSON, err := querier(ctx, []string{path}, abci.RequestQuery{Data: nil})
    61  		require.Error(t, err)
    62  		require.True(t, dataUnmarshalJSON == nil)
    63  
    64  		// successful case : query data while page limit is out range of data amount
    65  		queryParams = types.NewQueryDexInfoParams(types.TestTokenPairOwner, 2, 50)
    66  		bz, err = amino.MarshalJSON(queryParams)
    67  		require.Nil(t, err)
    68  		data, err = querier(ctx, []string{path}, abci.RequestQuery{Data: bz})
    69  		require.Nil(t, err)
    70  		require.True(t, data != nil)
    71  
    72  		// successful case : query data while  page limit is in range of data amount
    73  		queryParams = types.NewQueryDexInfoParams(types.TestTokenPairOwner, 1, 1)
    74  		bz, err = amino.MarshalJSON(queryParams)
    75  		require.Nil(t, err)
    76  		data, err = querier(ctx, []string{path}, abci.RequestQuery{Data: bz})
    77  		require.Nil(t, err)
    78  		require.True(t, data != nil)
    79  
    80  	}
    81  
    82  	// error case : failed to query because query path is wrong
    83  	queryParams := types.NewQueryDexInfoParams(types.TestTokenPairOwner, 1, 50)
    84  	bz, err := amino.MarshalJSON(queryParams)
    85  	require.Nil(t, err)
    86  	dataOther, err := querier(ctx, []string{"others"}, abci.RequestQuery{Data: bz})
    87  	require.NotNil(t, err)
    88  	require.True(t, dataOther == nil)
    89  
    90  }
    91  
    92  func TestQuerier_Deposits(t *testing.T) {
    93  	testInput := createTestInputWithBalance(t, 1, 10000)
    94  	ctx := testInput.Ctx
    95  	addr, err := sdk.AccAddressFromBech32(types.TestTokenPairOwner)
    96  	require.Nil(t, err)
    97  	tokenPair0 := &types.TokenPair{
    98  		BaseAssetSymbol:  "bToken0",
    99  		QuoteAssetSymbol: common.NativeToken,
   100  		Owner:            addr,
   101  		Deposits:         sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(50)),
   102  		BlockHeight:      8,
   103  	}
   104  
   105  	tokenPair1 := &types.TokenPair{
   106  		BaseAssetSymbol:  "bToken1",
   107  		QuoteAssetSymbol: common.NativeToken,
   108  		Owner:            addr,
   109  		Deposits:         sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(100)),
   110  		BlockHeight:      10,
   111  	}
   112  
   113  	// SaveTokenPair
   114  	err = testInput.DexKeeper.SaveTokenPair(ctx, tokenPair0)
   115  	require.Nil(t, err)
   116  	err = testInput.DexKeeper.SaveTokenPair(ctx, tokenPair1)
   117  	require.Nil(t, err)
   118  	querier := NewQuerier(testInput.DexKeeper)
   119  	path := types.QueryDeposits
   120  	// successful case
   121  	queryParams := types.NewQueryDepositParams(types.TestTokenPairOwner, "", common.NativeToken, 1, 50)
   122  	bz, err := amino.MarshalJSON(queryParams)
   123  	require.Nil(t, err)
   124  	data, err := querier(ctx, []string{path}, abci.RequestQuery{Data: bz})
   125  	require.Nil(t, err)
   126  	require.True(t, data != nil)
   127  
   128  	// error case : failed to query data because  param is nil
   129  	dataUnmarshalJSON, err := querier(ctx, []string{path}, abci.RequestQuery{Data: nil})
   130  	require.Error(t, err)
   131  	require.True(t, dataUnmarshalJSON == nil)
   132  
   133  	// successful case : query data while page limit is out range of data amount
   134  	queryParams = types.NewQueryDepositParams(types.TestTokenPairOwner, "", "", 2, 50)
   135  	bz, err = amino.MarshalJSON(queryParams)
   136  	require.Nil(t, err)
   137  	data, err = querier(ctx, []string{path}, abci.RequestQuery{Data: bz})
   138  	require.Nil(t, err)
   139  	require.True(t, data != nil)
   140  
   141  	// successful case : query data while  page limit is in range of data amount
   142  	queryParams = types.NewQueryDepositParams(types.TestTokenPairOwner, "", "", 1, 1)
   143  	bz, err = amino.MarshalJSON(queryParams)
   144  	require.Nil(t, err)
   145  	data, err = querier(ctx, []string{path}, abci.RequestQuery{Data: bz})
   146  	require.Nil(t, err)
   147  	require.True(t, data != nil)
   148  }
   149  
   150  func TestQuerier_QueryParams(t *testing.T) {
   151  
   152  	testInput := createTestInputWithBalance(t, 1, 10000)
   153  	ctx := testInput.Ctx
   154  
   155  	p := types.DefaultParams()
   156  	p.DelistMaxDepositPeriod = time.Second * 123
   157  	testInput.DexKeeper.SetParams(ctx, *p)
   158  	querier := NewQuerier(testInput.DexKeeper)
   159  	res, err := querier(ctx, []string{"params"}, abci.RequestQuery{})
   160  
   161  	require.True(t, len(res) > 0)
   162  	require.True(t, err == nil)
   163  
   164  }
   165  
   166  func TestQuerier_QueryProductsDelisting(t *testing.T) {
   167  
   168  	testInput := createTestInputWithBalance(t, 1, 10000)
   169  	ctx := testInput.Ctx
   170  
   171  	querier := NewQuerier(testInput.DexKeeper)
   172  
   173  	tokenPair := GetBuiltInTokenPair()
   174  	tokenPair.Delisting = true
   175  
   176  	err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair)
   177  	require.Nil(t, err)
   178  
   179  	res, err := querier(ctx, []string{types.QueryProductsDelisting}, abci.RequestQuery{})
   180  	require.True(t, len(res) > 0)
   181  	require.Nil(t, err)
   182  
   183  }
   184  
   185  func TestQueryParam(t *testing.T) {
   186  	// NewQueryDexInfoParams
   187  	tests := []struct {
   188  		name    string
   189  		owner   string
   190  		page    int
   191  		perPage int
   192  		result  bool
   193  	}{
   194  		{"new-no-owner", "", 1, 50, true},
   195  		{"new-with-owner", types.TestTokenPairOwner, 1, 50, true},
   196  		{"new-wrong-address", "wrong-address", 1, 50, false},
   197  		{"new-wrong-page", "", 0, 50, false},
   198  		{"new-wrong-per-page", "", 1, 0, false},
   199  	}
   200  	for _, tt := range tests {
   201  		t.Run(tt.name, func(t *testing.T) {
   202  			params := types.NewQueryDexInfoParams(tt.owner, tt.page, tt.perPage)
   203  			if tt.result {
   204  				require.NotNil(t, params)
   205  			} else {
   206  				require.NotNil(t, params)
   207  			}
   208  		})
   209  	}
   210  }