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

     1  //go:build ignore
     2  // +build ignore
     3  
     4  package keeper
     5  
     6  import (
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    11  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply"
    13  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    14  	"github.com/stretchr/testify/require"
    15  
    16  	"github.com/fibonacci-chain/fbc/x/farm/types"
    17  )
    18  
    19  const custom = "custom"
    20  
    21  func getQueriedParams(
    22  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier,
    23  ) (params types.Params) {
    24  	query := abci.RequestQuery{
    25  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryParameters}, "/"),
    26  		Data: []byte{},
    27  	}
    28  
    29  	bz, err := querier(ctx, []string{types.QueryParameters}, query)
    30  	require.Nil(t, err)
    31  	require.Nil(t, cdc.UnmarshalJSON(bz, &params))
    32  
    33  	return
    34  }
    35  
    36  func getQueriedPool(
    37  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, poolName string,
    38  ) (pool types.FarmPool) {
    39  	query := abci.RequestQuery{
    40  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryPool}, "/"),
    41  		Data: cdc.MustMarshalJSON(types.NewQueryPoolParams(poolName)),
    42  	}
    43  
    44  	bz, err := querier(ctx, []string{types.QueryPool}, query)
    45  	require.Nil(t, err)
    46  	require.Nil(t, cdc.UnmarshalJSON(bz, &pool))
    47  	return
    48  }
    49  
    50  func getQueriedPools(
    51  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier,
    52  ) (pools types.FarmPools) {
    53  	query := abci.RequestQuery{
    54  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryPools}, "/"),
    55  		Data: cdc.MustMarshalJSON(types.NewQueryPoolsParams(1, 10)),
    56  	}
    57  
    58  	bz, err := querier(ctx, []string{types.QueryPools}, query)
    59  	require.Nil(t, err)
    60  	require.Nil(t, cdc.UnmarshalJSON(bz, &pools))
    61  	return
    62  }
    63  
    64  func getQueriedEarnings(
    65  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, poolName string, addr sdk.AccAddress,
    66  ) (earnings types.Earnings) {
    67  	query := abci.RequestQuery{
    68  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryEarnings}, "/"),
    69  		Data: cdc.MustMarshalJSON(types.NewQueryPoolAccountParams(poolName, addr)),
    70  	}
    71  
    72  	bz, err := querier(ctx, []string{types.QueryEarnings}, query)
    73  	require.Nil(t, err)
    74  	require.Nil(t, cdc.UnmarshalJSON(bz, &earnings))
    75  
    76  	return
    77  }
    78  
    79  func getQueriedLockInfo(
    80  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier,
    81  	poolName string, addr sdk.AccAddress,
    82  ) (lockInfo types.LockInfo) {
    83  	query := abci.RequestQuery{
    84  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryLockInfo}, "/"),
    85  		Data: cdc.MustMarshalJSON(types.NewQueryPoolAccountParams(poolName, addr)),
    86  	}
    87  
    88  	bz, err := querier(ctx, []string{types.QueryLockInfo}, query)
    89  	require.Nil(t, err)
    90  	require.Nil(t, cdc.UnmarshalJSON(bz, &lockInfo))
    91  
    92  	return
    93  }
    94  
    95  func getQueriedWhitelist(
    96  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier,
    97  ) (whiteList types.PoolNameList) {
    98  	query := abci.RequestQuery{
    99  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryWhitelist}, "/"),
   100  	}
   101  
   102  	bz, err := querier(ctx, []string{types.QueryWhitelist}, query)
   103  	require.Nil(t, err)
   104  	require.Nil(t, cdc.UnmarshalJSON(bz, &whiteList))
   105  
   106  	return
   107  }
   108  
   109  func getQueriedAccount(
   110  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, addr sdk.AccAddress,
   111  ) (poolNameList types.PoolNameList) {
   112  	query := abci.RequestQuery{
   113  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryAccount}, "/"),
   114  		Data: cdc.MustMarshalJSON(types.NewQueryAccountParams(addr)),
   115  	}
   116  
   117  	bz, err := querier(ctx, []string{types.QueryAccount}, query)
   118  	require.Nil(t, err)
   119  	require.Nil(t, cdc.UnmarshalJSON(bz, &poolNameList))
   120  
   121  	return
   122  }
   123  
   124  func getQueriedAccountsLockedTo(
   125  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier, poolName string,
   126  ) (addrList types.AccAddrList) {
   127  	query := abci.RequestQuery{
   128  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryAccountsLockedTo}, "/"),
   129  		Data: cdc.MustMarshalJSON(types.NewQueryPoolParams(poolName)),
   130  	}
   131  
   132  	cp, err := querier(ctx, []string{types.QueryAccountsLockedTo}, query)
   133  	require.Nil(t, err)
   134  	require.Nil(t, cdc.UnmarshalJSON(cp, &addrList))
   135  
   136  	return
   137  }
   138  
   139  func getQueriedPoolNum(
   140  	t *testing.T, ctx sdk.Context, cdc *codec.Codec, querier sdk.Querier,
   141  ) (poolNum types.PoolNum) {
   142  	query := abci.RequestQuery{
   143  		Path: strings.Join([]string{custom, types.QuerierRoute, types.QueryPoolNum}, "/"),
   144  		Data: []byte{},
   145  	}
   146  
   147  	cp, err := querier(ctx, []string{types.QueryPoolNum}, query)
   148  	require.Nil(t, err)
   149  	require.Nil(t, cdc.UnmarshalJSON(cp, &poolNum))
   150  
   151  	return
   152  }
   153  
   154  func TestQueries(t *testing.T) {
   155  	cdc := codec.New()
   156  	types.RegisterCodec(cdc)
   157  	supply.RegisterCodec(cdc)
   158  	ctx, mockKeeper := GetKeeper(t)
   159  	querier := NewQuerier(mockKeeper.Keeper)
   160  
   161  	pools, lockInfos := initPoolsAndLockInfos(t, ctx, mockKeeper)
   162  
   163  	retParams := getQueriedParams(t, ctx, cdc, querier)
   164  	require.Equal(t, types.DefaultParams(), retParams)
   165  
   166  	retPool := getQueriedPool(t, ctx, cdc, querier, pools[0].Name)
   167  	require.Equal(t, pools[0], retPool)
   168  
   169  	retPools := getQueriedPools(t, ctx, cdc, querier)
   170  	require.Equal(t, pools, retPools)
   171  
   172  	retLockInfo := getQueriedLockInfo(t, ctx, cdc, querier, pools[0].Name, Addrs[0])
   173  	require.Equal(t, lockInfos[0], retLockInfo)
   174  
   175  	whiteList := getQueriedWhitelist(t, ctx, cdc, querier)
   176  	require.Equal(t, 1, len(whiteList))
   177  	require.Equal(t, pools[0].Name, whiteList[0])
   178  
   179  	retLockedPools := getQueriedAccount(t, ctx, cdc, querier, Addrs[0])
   180  	require.Equal(t, types.PoolNameList{pools[0].Name, pools[1].Name}, retLockedPools)
   181  
   182  	retLockedAddrs := getQueriedAccountsLockedTo(t, ctx, cdc, querier, pools[0].Name)
   183  	require.Equal(t, types.AccAddrList{Addrs[0], Addrs[1]}, retLockedAddrs)
   184  
   185  	retPoolNum := getQueriedPoolNum(t, ctx, cdc, querier)
   186  	require.Equal(t, len(pools), int(retPoolNum.Number))
   187  
   188  	// test query earnings
   189  	ctx.SetBlockHeight(120)
   190  	retEarnings := getQueriedEarnings(t, ctx, cdc, querier, pools[0].Name, Addrs[0])
   191  	yieldAmount := pools[0].YieldedTokenInfos[0].AmountYieldedPerBlock.
   192  		MulInt64(ctx.BlockHeight() - pools[0].YieldedTokenInfos[0].StartBlockHeightToYield)
   193  	cur := mockKeeper.Keeper.GetPoolCurrentRewards(ctx, pools[0].Name)
   194  	cur.Rewards = cur.Rewards.Add(
   195  		sdk.SysCoins{sdk.NewDecCoinFromDec(pools[0].YieldedTokenInfos[0].RemainingAmount.Denom, yieldAmount)}...,
   196  	)
   197  	referHis := mockKeeper.Keeper.GetPoolHistoricalRewards(ctx, pools[0].Name, lockInfos[0].ReferencePeriod)
   198  	newRatio := referHis.CumulativeRewardRatio.Add(cur.Rewards.QuoDecTruncate(pools[0].TotalValueLocked.Amount)...)
   199  	expectedAmount := newRatio.Sub(referHis.CumulativeRewardRatio).MulDecTruncate(lockInfos[0].Amount.Amount)
   200  	require.Equal(t, expectedAmount, retEarnings.AmountYielded)
   201  
   202  	// test not existed query path
   203  	bz, err := querier(ctx, []string{"xxxx"}, abci.RequestQuery{})
   204  	require.NotNil(t, err)
   205  	require.Nil(t, bz)
   206  }