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 }