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 }