github.com/Finschia/finschia-sdk@v0.49.1/x/authz/client/testutil/query.go (about)

     1  package testutil
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"time"
     7  
     8  	ostcli "github.com/Finschia/ostracon/libs/cli"
     9  
    10  	"github.com/Finschia/finschia-sdk/client/flags"
    11  	clitestutil "github.com/Finschia/finschia-sdk/testutil/cli"
    12  	sdk "github.com/Finschia/finschia-sdk/types"
    13  	"github.com/Finschia/finschia-sdk/x/authz"
    14  	"github.com/Finschia/finschia-sdk/x/authz/client/cli"
    15  )
    16  
    17  func (s *IntegrationTestSuite) TestQueryAuthorizations() {
    18  	val := s.network.Validators[0]
    19  
    20  	grantee := s.grantee[0]
    21  	twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix()
    22  
    23  	_, err := ExecGrant(
    24  		val,
    25  		[]string{
    26  			grantee.String(),
    27  			"send",
    28  			fmt.Sprintf("--%s=100steak", cli.FlagSpendLimit),
    29  			fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
    30  			fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address),
    31  			fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
    32  			fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours),
    33  			fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
    34  		},
    35  	)
    36  	s.Require().NoError(err)
    37  
    38  	testCases := []struct {
    39  		name      string
    40  		args      []string
    41  		expectErr bool
    42  		expErrMsg string
    43  	}{
    44  		{
    45  			"Error: Invalid grantee",
    46  			[]string{
    47  				val.Address.String(),
    48  				"invalid grantee",
    49  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
    50  			},
    51  			true,
    52  			"decoding bech32 failed: invalid character in string: ' '",
    53  		},
    54  		{
    55  			"Error: Invalid granter",
    56  			[]string{
    57  				"invalid granter",
    58  				grantee.String(),
    59  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
    60  			},
    61  			true,
    62  			"decoding bech32 failed: invalid character in string: ' '",
    63  		},
    64  		{
    65  			"Valid txn (json)",
    66  			[]string{
    67  				val.Address.String(),
    68  				grantee.String(),
    69  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
    70  			},
    71  			false,
    72  			``,
    73  		},
    74  	}
    75  	for _, tc := range testCases {
    76  		s.Run(tc.name, func() {
    77  			cmd := cli.GetCmdQueryGrants()
    78  			clientCtx := val.ClientCtx
    79  			resp, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
    80  			if tc.expectErr {
    81  				s.Require().Error(err)
    82  				s.Require().Contains(string(resp.Bytes()), tc.expErrMsg)
    83  			} else {
    84  				s.Require().NoError(err)
    85  				var grants authz.QueryGrantsResponse
    86  				err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &grants)
    87  				s.Require().NoError(err)
    88  			}
    89  		})
    90  	}
    91  }
    92  
    93  func (s *IntegrationTestSuite) TestQueryAuthorization() {
    94  	val := s.network.Validators[0]
    95  
    96  	grantee := s.grantee[0]
    97  	twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix()
    98  
    99  	_, err := ExecGrant(
   100  		val,
   101  		[]string{
   102  			grantee.String(),
   103  			"send",
   104  			fmt.Sprintf("--%s=100steak", cli.FlagSpendLimit),
   105  			fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   106  			fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address),
   107  			fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
   108  			fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours),
   109  			fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
   110  		},
   111  	)
   112  	s.Require().NoError(err)
   113  
   114  	testCases := []struct {
   115  		name           string
   116  		args           []string
   117  		expectErr      bool
   118  		expectedOutput string
   119  	}{
   120  		{
   121  			"Error: Invalid grantee",
   122  			[]string{
   123  				val.Address.String(),
   124  				"invalid grantee",
   125  				typeMsgSend,
   126  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   127  			},
   128  			true,
   129  			"",
   130  		},
   131  		{
   132  			"Error: Invalid granter",
   133  			[]string{
   134  				"invalid granter",
   135  				grantee.String(),
   136  				typeMsgSend,
   137  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   138  			},
   139  			true,
   140  			"",
   141  		},
   142  		{
   143  			"no authorization found",
   144  			[]string{
   145  				val.Address.String(),
   146  				grantee.String(),
   147  				"typeMsgSend",
   148  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   149  			},
   150  			true,
   151  			"",
   152  		},
   153  		{
   154  			"Valid txn (json)",
   155  			[]string{
   156  				val.Address.String(),
   157  				grantee.String(),
   158  				typeMsgSend,
   159  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   160  			},
   161  			false,
   162  			`{"@type":"/cosmos.bank.v1beta1.SendAuthorization","spend_limit":[{"denom":"steak","amount":"100"}]}`,
   163  		},
   164  	}
   165  	for _, tc := range testCases {
   166  		s.Run(tc.name, func() {
   167  			cmd := cli.GetCmdQueryGrants()
   168  			clientCtx := val.ClientCtx
   169  			out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
   170  			if tc.expectErr {
   171  				s.Require().Error(err)
   172  			} else {
   173  				s.Require().NoError(err)
   174  				s.Require().Contains(strings.TrimSpace(out.String()), tc.expectedOutput)
   175  			}
   176  		})
   177  	}
   178  }