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

     1  //go:build ignore
     2  // +build ignore
     3  
     4  package farm
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	swap "github.com/fibonacci-chain/fbc/x/ammswap/types"
    12  	"github.com/fibonacci-chain/fbc/x/farm/keeper"
    13  	"github.com/fibonacci-chain/fbc/x/farm/types"
    14  
    15  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    16  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    17  )
    18  
    19  func TestBeginBlocker(t *testing.T) {
    20  	// init
    21  	ctx, mk := keeper.GetKeeper(t)
    22  	k := mk.Keeper
    23  	farmParams := types.DefaultParams()
    24  	farmParams.YieldNativeToken = true
    25  	k.SetParams(ctx, farmParams)
    26  
    27  	tests := []struct {
    28  		name string
    29  		run  func(ctx sdk.Context, k keeper.Keeper)
    30  	}{
    31  		{
    32  			name: "empty MintFramingAccount",
    33  			run: func(ctx sdk.Context, k keeper.Keeper) {
    34  				require.NotPanics(t, func() {
    35  					BeginBlocker(ctx, abci.RequestBeginBlock{Header: abci.Header{Height: 1}}, k)
    36  				})
    37  			},
    38  		},
    39  		{
    40  			name: "no pools",
    41  			run: func(ctx sdk.Context, k keeper.Keeper) {
    42  				// mint native token
    43  				coins := sdk.NewDecCoinsFromDec(sdk.DefaultBondDenom, sdk.NewDec(10000))
    44  				k.SupplyKeeper().MintCoins(ctx, MintFarmingAccount, coins)
    45  				require.NotPanics(t, func() {
    46  					BeginBlocker(ctx, abci.RequestBeginBlock{Header: abci.Header{Height: 1}}, k)
    47  				})
    48  			},
    49  		},
    50  		{
    51  			name: "MintFarmingAccount balance:10000, and three pools:poolA(50%),poolB(30%),poolC(20%)",
    52  			run: func(ctx sdk.Context, k keeper.Keeper) {
    53  				// mint native token
    54  				coins := sdk.NewDecCoinsFromDec(sdk.DefaultBondDenom, sdk.NewDec(10000))
    55  				k.SupplyKeeper().MintCoins(ctx, MintFarmingAccount, coins)
    56  				moduleAcc := k.SupplyKeeper().GetModuleAccount(ctx, MintFarmingAccount)
    57  				yieldedNativeTokenAmt := moduleAcc.GetCoins().AmountOf(sdk.DefaultBondDenom)
    58  
    59  				// init swap pair
    60  				lockSymbol := "xxb"
    61  				quoteSymbol := k.GetParams(ctx).QuoteSymbol
    62  				swapTokenPair := swap.NewSwapPair(lockSymbol, quoteSymbol)
    63  				swapTokenPair.QuotePooledCoin.Amount = sdk.NewDec(10000)
    64  				swapTokenPair.BasePooledCoin.Amount = sdk.NewDec(10000)
    65  				k.SwapKeeper().SetSwapTokenPair(ctx, swapTokenPair.TokenPairName(), swapTokenPair)
    66  				k.SwapKeeper().SetParams(ctx, swap.DefaultParams())
    67  
    68  				// create pools
    69  				valueLockedPoolA := yieldedNativeTokenAmt.MulInt64(50).QuoInt64(100)
    70  				poolA := types.FarmPool{
    71  					Name:             "pool-a",
    72  					TotalValueLocked: sdk.NewDecCoinFromDec(lockSymbol, valueLockedPoolA),
    73  				}
    74  				k.SetFarmPool(ctx, poolA)
    75  				k.SetWhitelist(ctx, poolA.Name)
    76  				poolCurrentRewards := types.NewPoolCurrentRewards(ctx.BlockHeight(), 3, sdk.SysCoins{})
    77  				k.SetPoolCurrentRewards(ctx, poolA.Name, poolCurrentRewards)
    78  
    79  				valueLockedPoolB := yieldedNativeTokenAmt.MulInt64(30).QuoInt64(100)
    80  				poolB := types.FarmPool{
    81  					Name:             "pool-b",
    82  					TotalValueLocked: sdk.NewDecCoinFromDec(lockSymbol, valueLockedPoolB),
    83  				}
    84  				k.SetFarmPool(ctx, poolB)
    85  				k.SetWhitelist(ctx, poolB.Name)
    86  				k.SetPoolCurrentRewards(ctx, poolB.Name, poolCurrentRewards)
    87  
    88  				valueLockedPoolC := yieldedNativeTokenAmt.MulInt64(20).QuoInt64(100)
    89  				poolC := types.FarmPool{
    90  					Name:             "pool-c",
    91  					TotalValueLocked: sdk.NewDecCoinFromDec(lockSymbol, valueLockedPoolC),
    92  				}
    93  				k.SetFarmPool(ctx, poolC)
    94  				k.SetWhitelist(ctx, poolC.Name)
    95  				k.SetPoolCurrentRewards(ctx, poolC.Name, poolCurrentRewards)
    96  
    97  				// execute BeginBlocker
    98  				require.NotPanics(t, func() {
    99  					BeginBlocker(ctx, abci.RequestBeginBlock{Header: abci.Header{Height: 3}}, k)
   100  				})
   101  
   102  				// check pools
   103  				var found bool
   104  				poolA, found = k.GetFarmPool(ctx, poolA.Name)
   105  				require.True(t, found)
   106  				require.True(t, poolA.TotalAccumulatedRewards.IsEqual(sdk.NewDecCoinsFromDec(sdk.DefaultBondDenom, valueLockedPoolA)))
   107  				poolB, found = k.GetFarmPool(ctx, poolB.Name)
   108  				require.True(t, found)
   109  				require.True(t, poolB.TotalAccumulatedRewards.IsEqual(sdk.NewDecCoinsFromDec(sdk.DefaultBondDenom, valueLockedPoolB)))
   110  				poolC, found = k.GetFarmPool(ctx, poolC.Name)
   111  				require.True(t, found)
   112  				require.True(t, poolC.TotalAccumulatedRewards.IsEqual(sdk.NewDecCoinsFromDec(sdk.DefaultBondDenom, valueLockedPoolC)))
   113  
   114  			},
   115  		},
   116  	}
   117  
   118  	// run test
   119  	for _, test := range tests {
   120  		test.run(ctx, k)
   121  	}
   122  
   123  }
   124  
   125  func TestYieldNativeTokenDisabled(t *testing.T) {
   126  	ctx, mk := keeper.GetKeeper(t)
   127  	k := mk.Keeper
   128  
   129  	coins := sdk.NewDecCoinsFromDec(sdk.DefaultBondDenom, sdk.NewDec(10000))
   130  	err := k.SupplyKeeper().MintCoins(ctx, MintFarmingAccount, coins)
   131  	require.NoError(t, err)
   132  	retCoins := k.SupplyKeeper().GetModuleAccount(ctx, MintFarmingAccount).GetCoins()
   133  	require.Equal(t, coins, retCoins)
   134  	BeginBlocker(ctx, abci.RequestBeginBlock{Header: abci.Header{Height: 1}}, k)
   135  	retCoins = k.SupplyKeeper().GetModuleAccount(ctx, MintFarmingAccount).GetCoins()
   136  	require.Nil(t, retCoins)
   137  }