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

     1  //go:build ignore
     2  
     3  package ammswap
     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/auth/exported"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply"
    11  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    12  	"github.com/fibonacci-chain/fbc/x/ammswap/types"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestValidateGenesis(t *testing.T) {
    17  	defaultGenesisState := DefaultGenesisState()
    18  	testSwapTokenPair := types.GetTestSwapTokenPair()
    19  	defaultGenesisState.SwapTokenPairRecords = []SwapTokenPair{
    20  		testSwapTokenPair,
    21  	}
    22  	err := ValidateGenesis(defaultGenesisState)
    23  	require.Nil(t, err)
    24  
    25  	invalidBaseAmount := sdk.NewDecCoinFromDec("bsa", sdk.NewDec(10000))
    26  	invalidBaseAmount.Denom = "1add"
    27  	invalidQuoteAmount := sdk.NewDecCoinFromDec("bsa", sdk.NewDec(10000))
    28  	invalidQuoteAmount.Denom = "1dfdf"
    29  	invalidPoolTokenName := "abc"
    30  
    31  	defaultGenesisState.SwapTokenPairRecords = []SwapTokenPair{
    32  		*types.NewSwapTokenPair(invalidBaseAmount, testSwapTokenPair.QuotePooledCoin, testSwapTokenPair.PoolTokenName),
    33  	}
    34  	err = ValidateGenesis(defaultGenesisState)
    35  	require.NotNil(t, err)
    36  
    37  	defaultGenesisState.SwapTokenPairRecords = []SwapTokenPair{
    38  		*types.NewSwapTokenPair(testSwapTokenPair.BasePooledCoin, invalidQuoteAmount, testSwapTokenPair.PoolTokenName),
    39  	}
    40  	err = ValidateGenesis(defaultGenesisState)
    41  	require.NotNil(t, err)
    42  
    43  	defaultGenesisState.SwapTokenPairRecords = []SwapTokenPair{
    44  		*types.NewSwapTokenPair(testSwapTokenPair.BasePooledCoin, testSwapTokenPair.QuotePooledCoin, invalidPoolTokenName),
    45  	}
    46  	err = ValidateGenesis(defaultGenesisState)
    47  	require.NotNil(t, err)
    48  }
    49  
    50  func TestInitAndExportGenesis(t *testing.T) {
    51  	mapp, _ := getMockApp(t, 1)
    52  	keeper := mapp.swapKeeper
    53  	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    54  	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    55  	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
    56  
    57  	defaultGenesisState := DefaultGenesisState()
    58  	testSwapTokenPair := types.GetTestSwapTokenPair()
    59  	defaultGenesisState.SwapTokenPairRecords = []SwapTokenPair{
    60  		testSwapTokenPair,
    61  	}
    62  	InitGenesis(ctx, keeper, defaultGenesisState)
    63  	exportedGenesis := ExportGenesis(ctx, keeper)
    64  	require.Equal(t, defaultGenesisState, exportedGenesis)
    65  
    66  }
    67  
    68  func TestExportSupplyGenesisWithZeroLiquidity(t *testing.T) {
    69  	// init
    70  	mapp, addrKeysSlice := getMockApp(t, 1)
    71  	keeper := mapp.swapKeeper
    72  	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    73  	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    74  	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
    75  	// set test tokens
    76  	err := types.SetTestTokens(ctx, mapp.tokenKeeper, mapp.supplyKeeper, addrKeysSlice[0].Address, mapp.TotalCoinsSupply)
    77  	require.NoError(t, err)
    78  
    79  	handler := NewHandler(keeper)
    80  	// 1. create 2 new ammswap tokens
    81  	// then add liquidity in 2 swap pairs
    82  	// then remove liquidity totally in 1 swap pair
    83  	for _, msg := range types.CreateTestMsgs(addrKeysSlice[0].Address) {
    84  		_, err = handler(ctx, msg)
    85  		require.NoError(t, err)
    86  	}
    87  
    88  	// 2.1 Test supply Invariant
    89  	supplyinvariant := supply.AllInvariants(mapp.supplyKeeper)
    90  	_, broken := supplyinvariant(ctx)
    91  	require.False(t, broken)
    92  	// 2.2 Test supply ExportGenesis: remove coin whose supply is zero
    93  	var expectedCoins sdk.DecCoins
    94  	mapp.AccountKeeper.IterateAccounts(ctx, func(acc exported.Account) bool {
    95  		expectedCoins = expectedCoins.Add(acc.GetCoins()...)
    96  		return false
    97  	})
    98  	supplyExportGenesis := supply.ExportGenesis(ctx, mapp.supplyKeeper)
    99  	require.EqualValues(t, expectedCoins, supplyExportGenesis.Supply)
   100  }