github.com/Finschia/finschia-sdk@v0.48.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  				return
    44  			},
    45  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "1"),
    46  		},
    47  		{
    48  			name: "Custom amount",
    49  			fsModify: func(fs *pflag.FlagSet) {
    50  				fs.Set(FlagAmount, "2000stake")
    51  			},
    52  			expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01", "1"),
    53  		},
    54  		{
    55  			name: "Custom commission rate",
    56  			fsModify: func(fs *pflag.FlagSet) {
    57  				fs.Set(FlagCommissionRate, "0.54")
    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  				fs.Set(FlagCommissionMaxRate, "0.89")
    65  			},
    66  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.89", "0.01", "1"),
    67  		},
    68  		{
    69  			name: "Custom commission max change rate",
    70  			fsModify: func(fs *pflag.FlagSet) {
    71  				fs.Set(FlagCommissionMaxChangeRate, "0.55")
    72  			},
    73  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.55", "1"),
    74  		},
    75  		{
    76  			name: "Custom min self delegations",
    77  			fsModify: func(fs *pflag.FlagSet) {
    78  				fs.Set(FlagMinSelfDelegation, "0.33")
    79  			},
    80  			expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "0.33"),
    81  		},
    82  	}
    83  
    84  	for _, tc := range tests {
    85  		tc := tc
    86  		t.Run(tc.name, func(t *testing.T) {
    87  			fs, _ := CreateValidatorMsgFlagSet(ip)
    88  			fs.String(flags.FlagName, "", "name of private key with which to sign the gentx")
    89  
    90  			tc.fsModify(fs)
    91  
    92  			cvCfg, err := PrepareConfigForTxCreateValidator(fs, moniker, nodeID, chainID, valPubKey)
    93  			require.NoError(t, err)
    94  
    95  			require.Equal(t, tc.expectedCfg, cvCfg)
    96  		})
    97  	}
    98  }