github.com/cosmos/cosmos-sdk@v0.50.10/x/auth/vesting/client/cli/tx_test.go (about)

     1  package cli_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io"
     7  	"testing"
     8  	"time"
     9  
    10  	rpcclientmock "github.com/cometbft/cometbft/rpc/client/mock"
    11  	"github.com/stretchr/testify/suite"
    12  
    13  	sdkmath "cosmossdk.io/math"
    14  
    15  	"github.com/cosmos/cosmos-sdk/client"
    16  	"github.com/cosmos/cosmos-sdk/client/flags"
    17  	"github.com/cosmos/cosmos-sdk/codec/address"
    18  	"github.com/cosmos/cosmos-sdk/crypto/keyring"
    19  	svrcmd "github.com/cosmos/cosmos-sdk/server/cmd"
    20  	"github.com/cosmos/cosmos-sdk/testutil"
    21  	clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
    22  	sdk "github.com/cosmos/cosmos-sdk/types"
    23  	testutilmod "github.com/cosmos/cosmos-sdk/types/module/testutil"
    24  	"github.com/cosmos/cosmos-sdk/x/auth/vesting"
    25  	"github.com/cosmos/cosmos-sdk/x/auth/vesting/client/cli"
    26  )
    27  
    28  type CLITestSuite struct {
    29  	suite.Suite
    30  
    31  	kr      keyring.Keyring
    32  	encCfg  testutilmod.TestEncodingConfig
    33  	baseCtx client.Context
    34  }
    35  
    36  func TestMigrateTestSuite(t *testing.T) {
    37  	suite.Run(t, new(CLITestSuite))
    38  }
    39  
    40  func (s *CLITestSuite) SetupSuite() {
    41  	s.encCfg = testutilmod.MakeTestEncodingConfig(vesting.AppModuleBasic{})
    42  	s.kr = keyring.NewInMemory(s.encCfg.Codec)
    43  	s.baseCtx = client.Context{}.
    44  		WithKeyring(s.kr).
    45  		WithTxConfig(s.encCfg.TxConfig).
    46  		WithCodec(s.encCfg.Codec).
    47  		WithClient(clitestutil.MockCometRPC{Client: rpcclientmock.Client{}}).
    48  		WithAccountRetriever(client.MockAccountRetriever{}).
    49  		WithOutput(io.Discard)
    50  }
    51  
    52  func (s *CLITestSuite) TestNewMsgCreateVestingAccountCmd() {
    53  	accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1)
    54  	cmd := cli.NewMsgCreateVestingAccountCmd(address.NewBech32Codec("cosmos"))
    55  	cmd.SetOutput(io.Discard)
    56  
    57  	extraArgs := []string{
    58  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
    59  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
    60  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("photon", sdkmath.NewInt(10))).String()),
    61  		fmt.Sprintf("--%s=test-chain", flags.FlagChainID),
    62  		fmt.Sprintf("--%s=%s", flags.FlagFrom, accounts[0].Address),
    63  	}
    64  
    65  	t := time.Date(2033, time.April, 1, 12, 34, 56, 789, time.UTC).Unix()
    66  
    67  	testCases := []struct {
    68  		name      string
    69  		ctxGen    func() client.Context
    70  		from, to  sdk.AccAddress
    71  		amount    sdk.Coins
    72  		endTime   int64
    73  		extraArgs []string
    74  		expectErr bool
    75  	}{
    76  		{
    77  			"valid transaction",
    78  			func() client.Context {
    79  				return s.baseCtx
    80  			},
    81  			accounts[0].Address,
    82  			accounts[0].Address,
    83  			sdk.NewCoins(
    84  				sdk.NewCoin("stake", sdkmath.NewInt(10)),
    85  				sdk.NewCoin("photon", sdkmath.NewInt(40)),
    86  			),
    87  			t,
    88  			extraArgs,
    89  			false,
    90  		},
    91  		{
    92  			"invalid to Address",
    93  			func() client.Context {
    94  				return s.baseCtx
    95  			},
    96  			accounts[0].Address,
    97  			sdk.AccAddress{},
    98  			sdk.NewCoins(
    99  				sdk.NewCoin("stake", sdkmath.NewInt(10)),
   100  				sdk.NewCoin("photon", sdkmath.NewInt(40)),
   101  			),
   102  			t,
   103  			extraArgs,
   104  			true,
   105  		},
   106  		{
   107  			"invalid coins",
   108  			func() client.Context {
   109  				return s.baseCtx
   110  			},
   111  			accounts[0].Address,
   112  			accounts[0].Address,
   113  			nil,
   114  			t,
   115  			extraArgs,
   116  			true,
   117  		},
   118  	}
   119  
   120  	for _, tc := range testCases {
   121  		tc := tc
   122  		s.Run(tc.name, func() {
   123  			ctx := svrcmd.CreateExecuteContext(context.Background())
   124  
   125  			cmd.SetContext(ctx)
   126  			fmt.Println(tc.amount.String())
   127  			cmd.SetArgs(append([]string{tc.to.String(), tc.amount.String(), fmt.Sprint(tc.endTime)}, tc.extraArgs...))
   128  
   129  			s.Require().NoError(client.SetCmdClientContextHandler(tc.ctxGen(), cmd))
   130  
   131  			err := cmd.Execute()
   132  			if tc.expectErr {
   133  				s.Require().Error(err)
   134  			} else {
   135  				s.Require().NoError(err)
   136  			}
   137  		})
   138  	}
   139  }
   140  
   141  func (s *CLITestSuite) TestNewMsgCreatePermanentLockedAccountCmd() {
   142  	accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1)
   143  	cmd := cli.NewMsgCreatePermanentLockedAccountCmd(address.NewBech32Codec("cosmos"))
   144  	cmd.SetOutput(io.Discard)
   145  
   146  	extraArgs := []string{
   147  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
   148  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   149  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("photon", sdkmath.NewInt(10))).String()),
   150  		fmt.Sprintf("--%s=test-chain", flags.FlagChainID),
   151  		fmt.Sprintf("--%s=%s", flags.FlagFrom, accounts[0].Address),
   152  	}
   153  
   154  	testCases := []struct {
   155  		name      string
   156  		ctxGen    func() client.Context
   157  		to        sdk.AccAddress
   158  		amount    sdk.Coins
   159  		extraArgs []string
   160  		expectErr bool
   161  	}{
   162  		{
   163  			"valid transaction",
   164  			func() client.Context {
   165  				return s.baseCtx
   166  			},
   167  			accounts[0].Address,
   168  			sdk.NewCoins(
   169  				sdk.NewCoin("stake", sdkmath.NewInt(10)),
   170  				sdk.NewCoin("photon", sdkmath.NewInt(40)),
   171  			),
   172  			extraArgs,
   173  			false,
   174  		},
   175  		{
   176  			"invalid to Address",
   177  			func() client.Context {
   178  				return s.baseCtx
   179  			},
   180  			sdk.AccAddress{},
   181  			sdk.NewCoins(
   182  				sdk.NewCoin("stake", sdkmath.NewInt(10)),
   183  				sdk.NewCoin("photon", sdkmath.NewInt(40)),
   184  			),
   185  			extraArgs,
   186  			true,
   187  		},
   188  		{
   189  			"invalid coins",
   190  			func() client.Context {
   191  				return s.baseCtx
   192  			},
   193  			accounts[0].Address,
   194  			nil,
   195  			extraArgs,
   196  			true,
   197  		},
   198  	}
   199  
   200  	for _, tc := range testCases {
   201  		tc := tc
   202  		s.Run(tc.name, func() {
   203  			ctx := svrcmd.CreateExecuteContext(context.Background())
   204  
   205  			cmd.SetContext(ctx)
   206  			cmd.SetArgs(append([]string{tc.to.String(), tc.amount.String()}, tc.extraArgs...))
   207  
   208  			s.Require().NoError(client.SetCmdClientContextHandler(tc.ctxGen(), cmd))
   209  
   210  			err := cmd.Execute()
   211  			if tc.expectErr {
   212  				s.Require().Error(err)
   213  			} else {
   214  				s.Require().NoError(err)
   215  			}
   216  		})
   217  	}
   218  }
   219  
   220  func (s *CLITestSuite) TestNewMsgCreatePeriodicVestingAccountCmd() {
   221  	accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1)
   222  	cmd := cli.NewMsgCreatePeriodicVestingAccountCmd(address.NewBech32Codec("cosmos"))
   223  	cmd.SetOutput(io.Discard)
   224  
   225  	extraArgs := []string{
   226  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
   227  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   228  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("photon", sdkmath.NewInt(10))).String()),
   229  		fmt.Sprintf("--%s=test-chain", flags.FlagChainID),
   230  		fmt.Sprintf("--%s=%s", flags.FlagFrom, accounts[0].Address),
   231  	}
   232  
   233  	testCases := []struct {
   234  		name      string
   235  		ctxGen    func() client.Context
   236  		to        sdk.AccAddress
   237  		extraArgs []string
   238  		expectErr bool
   239  	}{
   240  		{
   241  			"valid transaction",
   242  			func() client.Context {
   243  				return s.baseCtx
   244  			},
   245  			accounts[0].Address,
   246  			extraArgs,
   247  			false,
   248  		},
   249  		{
   250  			"invalid to Address",
   251  			func() client.Context {
   252  				return s.baseCtx
   253  			},
   254  			sdk.AccAddress{},
   255  			extraArgs,
   256  			true,
   257  		},
   258  	}
   259  
   260  	for _, tc := range testCases {
   261  		tc := tc
   262  		s.Run(tc.name, func() {
   263  			ctx := svrcmd.CreateExecuteContext(context.Background())
   264  
   265  			cmd.SetContext(ctx)
   266  			cmd.SetArgs(append([]string{tc.to.String(), "./test.json"}, tc.extraArgs...))
   267  
   268  			s.Require().NoError(client.SetCmdClientContextHandler(tc.ctxGen(), cmd))
   269  
   270  			err := cmd.Execute()
   271  			if tc.expectErr {
   272  				s.Require().Error(err)
   273  			} else {
   274  				s.Require().NoError(err)
   275  			}
   276  		})
   277  	}
   278  }