github.com/Finschia/finschia-sdk@v0.49.1/x/fswap/client/testutil/tx.go (about) 1 package testutil 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/gogo/protobuf/proto" 8 9 "github.com/Finschia/finschia-sdk/client/flags" 10 clitestutil "github.com/Finschia/finschia-sdk/testutil/cli" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 banktypes "github.com/Finschia/finschia-sdk/x/bank/types" 13 "github.com/Finschia/finschia-sdk/x/fswap/client/cli" 14 ) 15 16 func (s *IntegrationTestSuite) TestCmdTxMsgSwap() { 17 val := s.network.Validators[0] 18 clientCtx := val.ClientCtx 19 // avoid printing as yaml from CLI command 20 clientCtx.OutputFormat = jsonOutputFormat 21 commonArgs := []string{ 22 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 23 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), 24 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), 25 } 26 27 testCases := []struct { 28 name string 29 args []string 30 expectErr bool 31 respType proto.Message 32 }{ 33 { 34 "valid transaction", 35 []string{ 36 val.Address.String(), 37 sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), 38 s.toDenom.Base, 39 }, 40 false, 41 &sdk.TxResponse{}, 42 }, 43 { 44 "invalid request (wrong number of args)", 45 []string{ 46 val.Address.String(), 47 sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), 48 s.toDenom.Base, 49 "extra", 50 }, 51 true, 52 nil, 53 }, 54 { 55 "invalid request (invalid from address)", 56 []string{ 57 "invalidAddress", 58 sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10)).String(), 59 s.toDenom.Base, 60 }, 61 true, 62 nil, 63 }, 64 { 65 "invalid request (invalid from coin amount)", 66 []string{ 67 val.Address.String(), 68 "", 69 s.toDenom.Base, 70 }, 71 true, 72 nil, 73 }, 74 } 75 76 for _, tc := range testCases { 77 s.Run(tc.name, func() { 78 cmd := cli.CmdTxMsgSwap() 79 bz, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, append(tc.args, commonArgs...)) 80 81 if tc.expectErr { 82 s.Require().Error(err) 83 } else { 84 s.Require().NoError(err) 85 s.Require().NoError(clientCtx.Codec.UnmarshalJSON(bz.Bytes(), tc.respType), bz.String()) 86 } 87 }) 88 } 89 } 90 91 func (s *IntegrationTestSuite) TestCmdTxMsgSwapAll() { 92 val := s.network.Validators[0] 93 clientCtx := val.ClientCtx 94 // avoid printing as yaml from CLI command 95 clientCtx.OutputFormat = jsonOutputFormat 96 commonArgs := []string{ 97 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 98 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), 99 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), 100 } 101 102 testCases := []struct { 103 name string 104 args []string 105 expectErr bool 106 respType proto.Message 107 }{ 108 { 109 "valid transaction", 110 []string{ 111 val.Address.String(), 112 s.cfg.BondDenom, 113 s.toDenom.Base, 114 }, 115 false, 116 &sdk.TxResponse{}, 117 }, 118 { 119 "invalid request (wrong number of args)", 120 []string{ 121 val.Address.String(), 122 s.cfg.BondDenom, 123 s.toDenom.Base, 124 "extra", 125 }, 126 true, 127 nil, 128 }, 129 { 130 "invalid request (invalid from address)", 131 []string{ 132 "invalidAddress", 133 s.cfg.BondDenom, 134 s.toDenom.Base, 135 }, 136 true, 137 nil, 138 }, 139 } 140 141 for _, tc := range testCases { 142 s.Run(tc.name, func() { 143 cmd := cli.CmdTxMsgSwapAll() 144 bz, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, append(tc.args, commonArgs...)) 145 146 if tc.expectErr { 147 s.Require().Error(err) 148 } else { 149 s.Require().NoError(err) 150 s.Require().NoError(clientCtx.Codec.UnmarshalJSON(bz.Bytes(), tc.respType), bz.String()) 151 } 152 }) 153 } 154 } 155 156 func (s *IntegrationTestSuite) TestMsgSetSwap() { 157 val := s.network.Validators[0] 158 clientCtx := val.ClientCtx 159 // avoid printing as yaml from CLI command 160 clientCtx.OutputFormat = jsonOutputFormat 161 162 denomMeta := struct { 163 Metadata banktypes.Metadata `json:"metadata"` 164 }{ 165 Metadata: s.toDenom, 166 } 167 jsonBytes, err := json.Marshal(denomMeta) 168 s.Require().NoError(err) 169 denomMetaString := string(jsonBytes) 170 171 commonArgs := []string{ 172 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 173 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), 174 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), 175 } 176 177 testCases := []struct { 178 name string 179 180 args []string 181 expectErr bool 182 }{ 183 { 184 "valid transaction (generateOnly)", 185 []string{ 186 s.authority.String(), 187 denomMetaString, 188 fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), 189 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 190 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 191 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, s.dummySwap.AmountCapForToDenom), 192 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, s.dummySwap.SwapRate), 193 }, 194 false, 195 }, 196 { 197 "invalid transaction (without generateOnly)", 198 []string{ 199 s.authority.String(), 200 denomMetaString, 201 fmt.Sprintf("--%s=false", flags.FlagGenerateOnly), 202 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 203 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 204 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, s.dummySwap.AmountCapForToDenom), 205 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, s.dummySwap.SwapRate), 206 }, 207 true, 208 }, 209 { 210 "extra args", 211 []string{ 212 s.authority.String(), 213 denomMetaString, 214 "extra", 215 fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), 216 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 217 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 218 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, s.dummySwap.AmountCapForToDenom), 219 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, s.dummySwap.SwapRate), 220 }, 221 true, 222 }, 223 { 224 "invalid authority", 225 []string{ 226 "invalid authority", 227 denomMetaString, 228 fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), 229 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 230 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 231 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, s.dummySwap.AmountCapForToDenom), 232 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, s.dummySwap.SwapRate), 233 }, 234 true, 235 }, 236 { 237 "invalid json", 238 []string{ 239 s.authority.String(), 240 "invalid json", 241 fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), 242 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 243 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 244 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, s.dummySwap.AmountCapForToDenom), 245 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, s.dummySwap.SwapRate), 246 }, 247 true, 248 }, 249 { 250 "invalid amountCapForToDenom", 251 []string{ 252 s.authority.String(), 253 denomMetaString, 254 fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), 255 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 256 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 257 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, "123.456"), 258 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, s.dummySwap.SwapRate), 259 }, 260 true, 261 }, 262 { 263 "invalid swapRate", 264 []string{ 265 s.authority.String(), 266 denomMetaString, 267 fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), 268 fmt.Sprintf("--%s=%s", cli.FlagFromDenom, s.dummySwap.FromDenom), 269 fmt.Sprintf("--%s=%s", cli.FlagToDenom, s.dummySwap.ToDenom), 270 fmt.Sprintf("--%s=%s", cli.FlagAmountCapForToDenom, s.dummySwap.AmountCapForToDenom), 271 fmt.Sprintf("--%s=%s", cli.FlagSwapRate, "abc.123"), 272 }, 273 true, 274 }, 275 } 276 277 for _, tc := range testCases { 278 s.Run(tc.name, func() { 279 cmd := cli.CmdMsgSetSwap() 280 bz, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, append(tc.args, commonArgs...)) 281 282 if tc.expectErr { 283 s.Require().Error(err) 284 } else { 285 s.Require().NoError(err) 286 _, err := s.cfg.TxConfig.TxJSONDecoder()(bz.Bytes()) 287 s.Require().NoError(err) 288 } 289 }) 290 } 291 }