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  }