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, ¶ms)) 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 }