github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/keeper/proxy_test.go (about)

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	"github.com/fibonacci-chain/fbc/x/staking/types"
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"testing"
     9  )
    10  
    11  func TestAddSharesToValidatorsAndWithdraw(t *testing.T) {
    12  	ctx, _, mkeeper := CreateTestInput(t, false, 0)
    13  	keeper := mkeeper.Keeper
    14  	valsOld := createVals(ctx, 4, keeper)
    15  
    16  	// never add shares before
    17  	dlgAddr := addrDels[0]
    18  	lastVals, lastShares := keeper.GetLastValsAddedSharesExisted(ctx, dlgAddr)
    19  	require.Nil(t, lastVals)
    20  	require.True(t, lastShares.IsZero())
    21  
    22  	// withdraw the shares last time
    23  	keeper.WithdrawLastShares(ctx, dlgAddr, lastVals, lastShares)
    24  
    25  	// add shares to validators
    26  	sharesOrig := sdk.NewDec(10000)
    27  	_, e := keeper.AddSharesToValidators(ctx, dlgAddr, valsOld, sharesOrig)
    28  	require.Nil(t, e)
    29  
    30  	// check valsOld status
    31  	valsNew := getVals(ctx, valsOld, keeper, t)
    32  	for i := 0; i < 4; i++ {
    33  		require.True(t, valsNew[i].DelegatorShares.GT(valsOld[i].DelegatorShares),
    34  			valsNew[i].Standardize().String(), valsOld[i].Standardize().String())
    35  
    36  		// check shares
    37  		shares, found := keeper.GetShares(ctx, dlgAddr, valsNew[i].OperatorAddress)
    38  		require.True(t, found)
    39  		require.True(t, shares.GT(lastShares), shares)
    40  	}
    41  
    42  	// standardize
    43  	sVals := valsNew.Standardize()
    44  	require.NotNil(t, sVals)
    45  	r, err := sVals.MarshalYAML()
    46  	require.Nil(t, err)
    47  	require.Contains(t, r, "Operator Address")
    48  }
    49  
    50  func createVals(ctx sdk.Context, num int, keeper Keeper) types.Validators {
    51  	vals := make(types.Validators, num)
    52  	for i := 0; i < num; i++ {
    53  		vals[i] = types.NewValidator(addrVals[i], PKs[i], types.Description{}, types.DefaultMinSelfDelegation)
    54  		keeper.SetValidator(ctx, vals[i])
    55  	}
    56  
    57  	return vals
    58  }
    59  
    60  func getVals(ctx sdk.Context, valOld types.Validators, keeper Keeper, t *testing.T) types.Validators {
    61  	lenVals := len(valOld)
    62  	gotVals := make(types.Validators, lenVals)
    63  	for i := 0; i < lenVals; i++ {
    64  		val, found := keeper.GetValidator(ctx, valOld[i].OperatorAddress)
    65  		require.True(t, found)
    66  		gotVals[i] = val
    67  	}
    68  	return gotVals
    69  }