github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/ammswap/keeper/querier_test.go (about) 1 //go:build ignore 2 3 package keeper 4 5 import ( 6 "encoding/json" 7 "testing" 8 9 "github.com/fibonacci-chain/fbc/x/common" 10 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mock" 12 13 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 15 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 16 "github.com/fibonacci-chain/fbc/x/ammswap/types" 17 "github.com/stretchr/testify/require" 18 ) 19 20 func initQurierTest(t *testing.T) (*TestInput, mock.AddrKeysSlice, sdk.Context, Keeper, sdk.Querier) { 21 mapp, addrSlice := GetTestInput(t, 1) 22 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 23 ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10) 24 mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply)) 25 keeper := mapp.swapKeeper 26 keeper.SetParams(ctx, types.DefaultParams()) 27 return mapp, addrSlice, ctx, keeper, NewQuerier(mapp.swapKeeper) 28 } 29 30 func TestNewQuerier(t *testing.T) { 31 _, _, ctx, keeper, querier := initQurierTest(t) 32 33 // querier with wrong path 34 path0 := []string{"any", types.TestBasePooledToken} 35 queryTokenPair, err := querier(ctx, path0, abci.RequestQuery{}) 36 require.NotNil(t, err) 37 require.Nil(t, queryTokenPair) 38 39 // add new token pair and query 40 path := []string{types.QuerySwapTokenPair, types.TestSwapTokenPairName} 41 swapTokenPair := types.GetTestSwapTokenPair() 42 keeper.SetSwapTokenPair(ctx, types.TestSwapTokenPairName, swapTokenPair) 43 queryTokenPair, err = querier(ctx, path, abci.RequestQuery{}) 44 require.Nil(t, err) 45 require.NotNil(t, queryTokenPair) 46 var response common.BaseResponse 47 jsonErr := json.Unmarshal(queryTokenPair, &response) 48 require.Nil(t, jsonErr) 49 require.NotNil(t, response.Data) 50 51 // delete token pair and query 52 keeper.DeleteSwapTokenPair(ctx, types.TestSwapTokenPairName) 53 queryTokenPair, err = querier(ctx, path, abci.RequestQuery{}) 54 require.Nil(t, err) 55 require.NotNil(t, queryTokenPair) 56 jsonErr = json.Unmarshal(queryTokenPair, &response) 57 require.Nil(t, jsonErr) 58 require.Nil(t, response.Data) 59 60 } 61 62 func TestQueryParams(t *testing.T) { 63 _, _, ctx, keeper, querier := initQurierTest(t) 64 65 path0 := []string{types.QueryParams} 66 resultBytes, err := querier(ctx, path0, abci.RequestQuery{}) 67 require.Nil(t, err) 68 result := types.Params{} 69 keeper.cdc.MustUnmarshalJSON(resultBytes, &result) 70 require.Equal(t, types.DefaultParams(), result) 71 } 72 73 func TestQuerySwapTokenPairs(t *testing.T) { 74 _, _, ctx, keeper, querier := initQurierTest(t) 75 76 tokenPair := types.TestSwapTokenPairName 77 swapTokenPair := types.GetTestSwapTokenPair() 78 keeper.SetSwapTokenPair(ctx, tokenPair, swapTokenPair) 79 80 path := []string{types.QuerySwapTokenPairs} 81 resultBytes, err := querier(ctx, path, abci.RequestQuery{}) 82 require.Nil(t, err) 83 var result []types.SwapTokenPair 84 keeper.cdc.MustUnmarshalJSON(resultBytes, &result) 85 expectedSwapTokenPairList := []types.SwapTokenPair{swapTokenPair} 86 require.Equal(t, expectedSwapTokenPairList, result) 87 } 88 89 func initTestPool(t *testing.T, addrList mock.AddrKeysSlice, mapp *TestInput, 90 ctx sdk.Context, keeper Keeper, baseTokenAmount, quoteTokenAmount sdk.DecCoin, poolTokenAmount sdk.Dec) types.SwapTokenPair { 91 swapTokenPair := types.SwapTokenPair{ 92 QuotePooledCoin: quoteTokenAmount, 93 BasePooledCoin: baseTokenAmount, 94 PoolTokenName: types.GetPoolTokenName(baseTokenAmount.Denom, quoteTokenAmount.Denom), 95 } 96 keeper.SetSwapTokenPair(ctx, types.GetSwapTokenPairName(baseTokenAmount.Denom, quoteTokenAmount.Denom), swapTokenPair) 97 poolToken := types.InitPoolToken(swapTokenPair.PoolTokenName) 98 initPoolTokenAmount := sdk.NewDecCoinFromDec(swapTokenPair.PoolTokenName, poolTokenAmount) 99 mapp.tokenKeeper.NewToken(ctx, poolToken) 100 err := keeper.MintPoolCoinsToUser(ctx, sdk.DecCoins{initPoolTokenAmount}, addrList[0].Address) 101 require.Nil(t, err) 102 return swapTokenPair 103 } 104 105 func TestQueryRedeemableAssets(t *testing.T) { 106 mapp, addrList, ctx, keeper, querier := initQurierTest(t) 107 108 baseTokenAmount := sdk.NewDecCoinFromDec(types.TestBasePooledToken, sdk.NewDec(100)) 109 quoteTokenAmount := sdk.NewDecCoinFromDec(types.TestQuotePooledToken, sdk.NewDec(100)) 110 poolTokenAmount := sdk.NewDec(1) 111 swapTokenPair := initTestPool(t, addrList, mapp, ctx, keeper, baseTokenAmount, quoteTokenAmount, poolTokenAmount) 112 113 path := []string{types.QueryRedeemableAssets, swapTokenPair.TokenPairName(), poolTokenAmount.String()} 114 resultBytes, err := querier(ctx, path, abci.RequestQuery{}) 115 require.Nil(t, err) 116 var result []sdk.SysCoin 117 keeper.cdc.MustUnmarshalJSON(resultBytes, &result) 118 expectedAmountList := []sdk.SysCoin{swapTokenPair.BasePooledCoin, swapTokenPair.QuotePooledCoin} 119 require.Equal(t, expectedAmountList, result) 120 } 121 122 func TestQueryBuyAmount(t *testing.T) { 123 mapp, addrList, ctx, keeper, querier := initQurierTest(t) 124 125 baseTokenAmount := sdk.NewDecCoinFromDec(types.TestBasePooledToken, sdk.NewDec(100)) 126 quoteTokenAmount := sdk.NewDecCoinFromDec(types.TestQuotePooledToken, sdk.NewDec(100)) 127 poolTokenAmount := sdk.NewDec(1) 128 swapTokenPair := initTestPool(t, addrList, mapp, ctx, keeper, baseTokenAmount, quoteTokenAmount, poolTokenAmount) 129 130 path := []string{types.QueryBuyAmount} 131 var queryParams types.QueryBuyAmountParams 132 queryParams.SoldToken = swapTokenPair.QuotePooledCoin 133 queryParams.TokenToBuy = swapTokenPair.BasePooledCoin.Denom 134 requestBytes := keeper.cdc.MustMarshalJSON(queryParams) 135 resultBytes, err := querier(ctx, path, abci.RequestQuery{Data: requestBytes}) 136 require.Nil(t, err) 137 var result string 138 keeper.cdc.MustUnmarshalJSON(resultBytes, &result) 139 expectedToken := "49.924887330996494742" 140 require.Equal(t, expectedToken, result) 141 142 baseTokenAmount2 := sdk.NewDecCoinFromDec(types.TestBasePooledToken2, sdk.NewDec(100)) 143 quoteTokenAmount2 := sdk.NewDecCoinFromDec(types.TestQuotePooledToken, sdk.NewDec(100)) 144 poolTokenAmount2 := sdk.NewDec(1) 145 swapTokenPair2 := initTestPool(t, addrList, mapp, ctx, keeper, baseTokenAmount2, quoteTokenAmount2, poolTokenAmount2) 146 147 queryParams.SoldToken = swapTokenPair2.BasePooledCoin 148 queryParams.TokenToBuy = swapTokenPair.BasePooledCoin.Denom 149 requestBytes = keeper.cdc.MustMarshalJSON(queryParams) 150 resultBytes, err = querier(ctx, path, abci.RequestQuery{Data: requestBytes}) 151 require.Nil(t, err) 152 keeper.cdc.MustUnmarshalJSON(resultBytes, &result) 153 expectedToken = "33.233233333634235135" 154 require.Equal(t, expectedToken, result) 155 }