github.com/Finschia/finschia-sdk@v0.49.1/x/staking/client/cli/tx_test.go (about)

     1  package cli
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/spf13/pflag"
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/Finschia/finschia-sdk/client/flags"
    10  	"github.com/Finschia/finschia-sdk/crypto/keys/ed25519"
    11  )
    12  
    13  func TestPrepareConfigForTxCreateValidator(t *testing.T) {
    14  	chainID := "chainID"
    15  	ip := "1.1.1.1"
    16  	nodeID := "nodeID"
    17  	privKey := ed25519.GenPrivKey()
    18  	valPubKey := privKey.PubKey()
    19  	moniker := "DefaultMoniker"
    20  	mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange, minSelfDelegation string) TxCreateValidatorConfig {
    21  		return TxCreateValidatorConfig{
    22  			IP:                      ip,
    23  			ChainID:                 chainID,
    24  			NodeID:                  nodeID,
    25  			PubKey:                  valPubKey,
    26  			Moniker:                 moniker,
    27  			Amount:                  amount,
    28  			CommissionRate:          commission,
    29  			CommissionMaxRate:       commissionMax,
    30  			CommissionMaxChangeRate: commissionMaxChange,
    31  			MinSelfDelegation:       minSelfDelegation,
    32  		}
    33  	}
    34  
    35  	tests := []struct {
    36  		name        string
    37  		fsModify    func(fs *pflag.FlagSet)
    38  		expectedCfg TxCreateValidatorConfig
    39  	}{
    40  		{
    41  			name:        "all defaults",
    42  			fsModify:    func(fs *pflag.FlagSet) {},
    43  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "1"),
    44  		},
    45  		{
    46  			name: "Custom amount",
    47  			fsModify: func(fs *pflag.FlagSet) {
    48  				err := fs.Set(FlagAmount, "2000stake")
    49  				require.NoError(t, err)
    50  			},
    51  			expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01", "1"),
    52  		},
    53  		{
    54  			name: "Custom commission rate",
    55  			fsModify: func(fs *pflag.FlagSet) {
    56  				err := fs.Set(FlagCommissionRate, "0.54")
    57  				require.NoError(t, err)
    58  			},
    59  			expectedCfg: mkTxValCfg(defaultAmount, "0.54", "0.2", "0.01", "1"),
    60  		},
    61  		{
    62  			name: "Custom commission max rate",
    63  			fsModify: func(fs *pflag.FlagSet) {
    64  				err := fs.Set(FlagCommissionMaxRate, "0.89")
    65  				require.NoError(t, err)
    66  			},
    67  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.89", "0.01", "1"),
    68  		},
    69  		{
    70  			name: "Custom commission max change rate",
    71  			fsModify: func(fs *pflag.FlagSet) {
    72  				err := fs.Set(FlagCommissionMaxChangeRate, "0.55")
    73  				require.NoError(t, err)
    74  			},
    75  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.55", "1"),
    76  		},
    77  		{
    78  			name: "Custom min self delegations",
    79  			fsModify: func(fs *pflag.FlagSet) {
    80  				err := fs.Set(FlagMinSelfDelegation, "0.33")
    81  				require.NoError(t, err)
    82  			},
    83  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "0.33"),
    84  		},
    85  	}
    86  
    87  	for _, tc := range tests {
    88  		t.Run(tc.name, func(t *testing.T) {
    89  			fs, _ := CreateValidatorMsgFlagSet(ip)
    90  			fs.String(flags.FlagName, "", "name of private key with which to sign the gentx")
    91  
    92  			tc.fsModify(fs)
    93  
    94  			cvCfg, err := PrepareConfigForTxCreateValidator(fs, moniker, nodeID, chainID, valPubKey)
    95  			require.NoError(t, err)
    96  
    97  			require.Equal(t, tc.expectedCfg, cvCfg)
    98  		})
    99  	}
   100  }