github.com/Finschia/finschia-sdk@v0.48.1/simapp/simd/cmd/genaccounts_test.go (about)

     1  package cmd_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/spf13/viper"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/Finschia/ostracon/libs/log"
    12  
    13  	"github.com/Finschia/finschia-sdk/client"
    14  	"github.com/Finschia/finschia-sdk/client/flags"
    15  	"github.com/Finschia/finschia-sdk/crypto/hd"
    16  	"github.com/Finschia/finschia-sdk/crypto/keyring"
    17  	"github.com/Finschia/finschia-sdk/server"
    18  	"github.com/Finschia/finschia-sdk/simapp"
    19  	simcmd "github.com/Finschia/finschia-sdk/simapp/simd/cmd"
    20  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    21  	sdk "github.com/Finschia/finschia-sdk/types"
    22  	"github.com/Finschia/finschia-sdk/types/module"
    23  	"github.com/Finschia/finschia-sdk/x/genutil"
    24  	genutiltest "github.com/Finschia/finschia-sdk/x/genutil/client/testutil"
    25  )
    26  
    27  var testMbm = module.NewBasicManager(genutil.AppModuleBasic{})
    28  
    29  func TestAddGenesisAccountCmd(t *testing.T) {
    30  	_, _, addr1 := testdata.KeyTestPubAddr()
    31  	tests := []struct {
    32  		name        string
    33  		addr        string
    34  		denom       string
    35  		withKeyring bool
    36  		expectErr   bool
    37  	}{
    38  		{
    39  			name:        "invalid address",
    40  			addr:        "",
    41  			denom:       "1000atom",
    42  			withKeyring: false,
    43  			expectErr:   true,
    44  		},
    45  		{
    46  			name:        "valid address",
    47  			addr:        addr1.String(),
    48  			denom:       "1000atom",
    49  			withKeyring: false,
    50  			expectErr:   false,
    51  		},
    52  		{
    53  			name:        "multiple denoms",
    54  			addr:        addr1.String(),
    55  			denom:       "1000atom, 2000stake",
    56  			withKeyring: false,
    57  			expectErr:   false,
    58  		},
    59  		{
    60  			name:        "with keyring",
    61  			addr:        "ser",
    62  			denom:       "1000atom",
    63  			withKeyring: true,
    64  			expectErr:   false,
    65  		},
    66  	}
    67  
    68  	for _, tc := range tests {
    69  		tc := tc
    70  		t.Run(tc.name, func(t *testing.T) {
    71  			home := t.TempDir()
    72  			logger := log.NewNopLogger()
    73  			cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
    74  			require.NoError(t, err)
    75  
    76  			appCodec := simapp.MakeTestEncodingConfig().Marshaler
    77  			err = genutiltest.ExecInitCmd(testMbm, home, appCodec)
    78  			require.NoError(t, err)
    79  
    80  			serverCtx := server.NewContext(viper.New(), cfg, logger)
    81  			clientCtx := client.Context{}.WithCodec(appCodec).WithHomeDir(home)
    82  
    83  			if tc.withKeyring {
    84  				path := hd.CreateHDPath(118, 0, 0).String()
    85  				kr, err := keyring.New(sdk.KeyringServiceName(), keyring.BackendMemory, home, nil)
    86  				require.NoError(t, err)
    87  				_, _, err = kr.NewMnemonic(tc.addr, keyring.English, path, keyring.DefaultBIP39Passphrase, hd.Secp256k1)
    88  				require.NoError(t, err)
    89  				clientCtx = clientCtx.WithKeyring(kr)
    90  			}
    91  
    92  			ctx := context.Background()
    93  			ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
    94  			ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
    95  
    96  			cmd := simcmd.AddGenesisAccountCmd(home)
    97  			cmd.SetArgs([]string{
    98  				tc.addr,
    99  				tc.denom,
   100  				fmt.Sprintf("--%s=home", flags.FlagHome),
   101  			})
   102  
   103  			if tc.expectErr {
   104  				require.Error(t, cmd.ExecuteContext(ctx))
   105  			} else {
   106  				require.NoError(t, cmd.ExecuteContext(ctx))
   107  			}
   108  		})
   109  	}
   110  }