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 }