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

     1  //go:build ignore
     2  
     3  package keeper
     4  
     5  import (
     6  	"testing"
     7  
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply"
    10  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    11  	"github.com/fibonacci-chain/fbc/x/ammswap/types"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  const addrTest = "ex1rf9wr069pt64e58f2w3mjs9w72g8vemzw26658"
    16  
    17  func TestKeeper_GetPoolTokenInfo(t *testing.T) {
    18  	mapp, _ := GetTestInput(t, 1)
    19  	keeper := mapp.swapKeeper
    20  	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    21  	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    22  	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
    23  
    24  	// init a pool token
    25  	symbol := types.GetPoolTokenName(types.TestBasePooledToken, types.TestQuotePooledToken)
    26  	keeper.NewPoolToken(ctx, symbol)
    27  	poolToken, err := keeper.GetPoolTokenInfo(ctx, symbol)
    28  	require.Nil(t, err)
    29  	require.EqualValues(t, symbol, poolToken.WholeName)
    30  
    31  	// pool token is Interest token
    32  	require.EqualValues(t, types.GenerateTokenType, poolToken.Type)
    33  
    34  	// check pool token total supply
    35  	amount := keeper.GetPoolTokenAmount(ctx, symbol)
    36  	require.EqualValues(t, sdk.MustNewDecFromStr("0"), amount)
    37  
    38  	mintToken := sdk.NewDecCoinFromDec(symbol, sdk.NewDec(1000000))
    39  	err = keeper.MintPoolCoinsToUser(ctx, sdk.SysCoins{mintToken}, sdk.AccAddress(addrTest))
    40  	require.Nil(t, err)
    41  
    42  	balance := mapp.bankKeeper.GetCoins(ctx, sdk.AccAddress(addrTest))
    43  	require.NotNil(t, balance)
    44  }
    45  
    46  func TestKeeper_GetSwapTokenPairs(t *testing.T) {
    47  	mapp, _ := GetTestInput(t, 1)
    48  	keeper := mapp.swapKeeper
    49  	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    50  	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    51  	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
    52  
    53  	swapTokenPair := types.GetTestSwapTokenPair()
    54  	keeper.SetSwapTokenPair(ctx, types.TestSwapTokenPairName, swapTokenPair)
    55  
    56  	expectedSwapTokenPairList := []types.SwapTokenPair{swapTokenPair}
    57  	swapTokenPairList := keeper.GetSwapTokenPairs(ctx)
    58  	require.Equal(t, expectedSwapTokenPairList, swapTokenPairList)
    59  }
    60  
    61  func TestKeeper_GetRedeemableAssets(t *testing.T) {
    62  	mapp, _ := GetTestInput(t, 1)
    63  	keeper := mapp.swapKeeper
    64  	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    65  	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    66  	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
    67  
    68  	swapTokenPair := types.GetTestSwapTokenPair()
    69  	tokenNumber := sdk.NewDec(100)
    70  	swapTokenPair.QuotePooledCoin.Amount = tokenNumber
    71  	swapTokenPair.BasePooledCoin.Amount = tokenNumber
    72  	keeper.SetSwapTokenPair(ctx, types.TestSwapTokenPairName, swapTokenPair)
    73  	poolToken := types.InitPoolToken(swapTokenPair.PoolTokenName)
    74  	initPoolTokenAmount := sdk.NewDecCoinFromDec(swapTokenPair.PoolTokenName, sdk.NewDec(1))
    75  	err := keeper.MintPoolCoinsToUser(ctx, sdk.SysCoins{initPoolTokenAmount}, sdk.AccAddress(addrTest))
    76  	require.Nil(t, err)
    77  	mapp.tokenKeeper.NewToken(ctx, poolToken)
    78  
    79  	expectedBaseAmount, expectedQuoteAmount := swapTokenPair.BasePooledCoin, swapTokenPair.QuotePooledCoin
    80  	baseAmount, quoteAmount, err := keeper.GetRedeemableAssets(ctx, swapTokenPair.BasePooledCoin.Denom, swapTokenPair.QuotePooledCoin.Denom, initPoolTokenAmount.Amount)
    81  	require.Equal(t, expectedBaseAmount, baseAmount)
    82  	require.Equal(t, expectedQuoteAmount, quoteAmount)
    83  }
    84  
    85  func TestGetInputPrice(t *testing.T) {
    86  	inputAmount := sdk.NewDecWithPrec(1, sdk.Precision)
    87  	inputReserve := sdk.NewDec(1)
    88  	outputReserve := sdk.NewDec(1)
    89  	feeRate := sdk.NewDecWithPrec(3, 3)
    90  	outputAmount := GetInputPrice(inputAmount, inputReserve, outputReserve, feeRate)
    91  	expectedAmount := sdk.NewDec(0)
    92  	require.Equal(t, expectedAmount.String(), outputAmount.String())
    93  }