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

     1  package keeper
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    11  )
    12  
    13  func TestSetWithdrawAddr(t *testing.T) {
    14  	ctx, _, keeper, _, _ := CreateTestInputDefault(t, false, 1000)
    15  
    16  	params := keeper.GetParams(ctx)
    17  	params.WithdrawAddrEnabled = false
    18  	keeper.SetParams(ctx, params)
    19  
    20  	err := keeper.SetWithdrawAddr(ctx, delAddr1, delAddr2)
    21  	require.NotNil(t, err)
    22  
    23  	params.WithdrawAddrEnabled = true
    24  	keeper.SetParams(ctx, params)
    25  
    26  	err = keeper.SetWithdrawAddr(ctx, delAddr1, delAddr2)
    27  	require.Nil(t, err)
    28  
    29  	keeper.blacklistedAddrs[distrAcc.GetAddress().String()] = true
    30  	require.Error(t, keeper.SetWithdrawAddr(ctx, delAddr1, distrAcc.GetAddress()))
    31  }
    32  
    33  func TestWithdrawValidatorCommission(t *testing.T) {
    34  	ctx, ak, keeper, _, _ := CreateTestInputDefault(t, false, 1000)
    35  
    36  	valCommission := sdk.DecCoins{
    37  		sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))),
    38  		sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(3).Quo(sdk.NewDec(2))),
    39  	}
    40  
    41  	// set module account coins
    42  	distrAcc := keeper.GetDistributionAccount(ctx)
    43  	distrAcc.SetCoins(sdk.NewCoins(
    44  		sdk.NewCoin("mytoken", sdk.NewInt(2)),
    45  		sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)),
    46  	))
    47  	keeper.supplyKeeper.SetModuleAccount(ctx, distrAcc)
    48  
    49  	// check initial balance
    50  	balance := ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins()
    51  	expTokens := sdk.TokensFromConsensusPower(1000)
    52  	expCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, expTokens))
    53  	require.Equal(t, expCoins, balance)
    54  
    55  	// set outstanding rewards
    56  	keeper.SetValidatorOutstandingRewards(ctx, valOpAddr3, valCommission)
    57  
    58  	// set commission
    59  	keeper.SetValidatorAccumulatedCommission(ctx, valOpAddr3, valCommission)
    60  
    61  	// withdraw commission
    62  	keeper.WithdrawValidatorCommission(ctx, valOpAddr3)
    63  
    64  	// check balance increase
    65  	balance = ak.GetAccount(ctx, sdk.AccAddress(valOpAddr3)).GetCoins()
    66  	require.Equal(t, sdk.NewCoins(
    67  		sdk.NewCoin("mytoken", sdk.NewInt(1)),
    68  		sdk.NewCoin(sdk.DefaultBondDenom, expTokens.AddRaw(1)),
    69  	), balance)
    70  
    71  	// check remainder
    72  	remainder := keeper.GetValidatorAccumulatedCommission(ctx, valOpAddr3)
    73  	require.Equal(t, sdk.DecCoins{
    74  		sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDec(1).Quo(sdk.NewDec(2))),
    75  		sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(1).Quo(sdk.NewDec(4))),
    76  	}, remainder)
    77  
    78  	require.True(t, true)
    79  }
    80  
    81  func TestGetTotalRewards(t *testing.T) {
    82  	ctx, _, keeper, _, _ := CreateTestInputDefault(t, false, 1000)
    83  
    84  	valCommission := sdk.DecCoins{
    85  		sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))),
    86  		sdk.NewDecCoinFromDec("stake", sdk.NewDec(3).Quo(sdk.NewDec(2))),
    87  	}
    88  
    89  	keeper.SetValidatorOutstandingRewards(ctx, valOpAddr1, valCommission)
    90  	keeper.SetValidatorOutstandingRewards(ctx, valOpAddr2, valCommission)
    91  
    92  	expectedRewards := valCommission.MulDec(sdk.NewDec(2))
    93  	totalRewards := keeper.GetTotalRewards(ctx)
    94  
    95  	require.Equal(t, expectedRewards, totalRewards)
    96  }
    97  
    98  func TestFundCommunityPool(t *testing.T) {
    99  	// nolint dogsled
   100  	ctx, _, bk, keeper, _, _, _ := CreateTestInputAdvanced(t, false, 1000, sdk.NewDecWithPrec(2, 2))
   101  
   102  	amount := sdk.NewCoins(sdk.NewInt64Coin("stake", 100))
   103  	_ = bk.SetCoins(ctx, delAddr1, amount)
   104  
   105  	initPool := keeper.GetFeePool(ctx)
   106  	assert.Empty(t, initPool.CommunityPool)
   107  
   108  	err := keeper.FundCommunityPool(ctx, amount, delAddr1)
   109  	assert.Nil(t, err)
   110  
   111  	assert.Equal(t, initPool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...), keeper.GetFeePool(ctx).CommunityPool)
   112  	assert.Empty(t, bk.GetCoins(ctx, delAddr1))
   113  }