github.com/Finschia/finschia-sdk@v0.48.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  		tc := tc
    77  
    78  		s.Run(tc.name, func() {
    79  			cmd := cli.GetCmdQueryGrants()
    80  			clientCtx := val.ClientCtx
    81  			resp, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
    82  			if tc.expectErr {
    83  				s.Require().Error(err)
    84  				s.Require().Contains(string(resp.Bytes()), tc.expErrMsg)
    85  			} else {
    86  				s.Require().NoError(err)
    87  				var grants authz.QueryGrantsResponse
    88  				err = val.ClientCtx.Codec.UnmarshalJSON(resp.Bytes(), &grants)
    89  				s.Require().NoError(err)
    90  			}
    91  		})
    92  	}
    93  }
    94  
    95  func (s *IntegrationTestSuite) TestQueryAuthorization() {
    96  	val := s.network.Validators[0]
    97  
    98  	grantee := s.grantee[0]
    99  	twoHours := time.Now().Add(time.Minute * time.Duration(120)).Unix()
   100  
   101  	_, err := ExecGrant(
   102  		val,
   103  		[]string{
   104  			grantee.String(),
   105  			"send",
   106  			fmt.Sprintf("--%s=100steak", cli.FlagSpendLimit),
   107  			fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   108  			fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address),
   109  			fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
   110  			fmt.Sprintf("--%s=%d", cli.FlagExpiration, twoHours),
   111  			fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
   112  		},
   113  	)
   114  	s.Require().NoError(err)
   115  
   116  	testCases := []struct {
   117  		name           string
   118  		args           []string
   119  		expectErr      bool
   120  		expectedOutput string
   121  	}{
   122  		{
   123  			"Error: Invalid grantee",
   124  			[]string{
   125  				val.Address.String(),
   126  				"invalid grantee",
   127  				typeMsgSend,
   128  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   129  			},
   130  			true,
   131  			"",
   132  		},
   133  		{
   134  			"Error: Invalid granter",
   135  			[]string{
   136  				"invalid granter",
   137  				grantee.String(),
   138  				typeMsgSend,
   139  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   140  			},
   141  			true,
   142  			"",
   143  		},
   144  		{
   145  			"no authorization found",
   146  			[]string{
   147  				val.Address.String(),
   148  				grantee.String(),
   149  				"typeMsgSend",
   150  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   151  			},
   152  			true,
   153  			"",
   154  		},
   155  		{
   156  			"Valid txn (json)",
   157  			[]string{
   158  				val.Address.String(),
   159  				grantee.String(),
   160  				typeMsgSend,
   161  				fmt.Sprintf("--%s=json", ostcli.OutputFlag),
   162  			},
   163  			false,
   164  			`{"@type":"/cosmos.bank.v1beta1.SendAuthorization","spend_limit":[{"denom":"steak","amount":"100"}]}`,
   165  		},
   166  	}
   167  	for _, tc := range testCases {
   168  		tc := tc
   169  
   170  		s.Run(tc.name, func() {
   171  			cmd := cli.GetCmdQueryGrants()
   172  			clientCtx := val.ClientCtx
   173  			out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
   174  			if tc.expectErr {
   175  				s.Require().Error(err)
   176  			} else {
   177  				s.Require().NoError(err)
   178  				s.Require().Contains(strings.TrimSpace(out.String()), tc.expectedOutput)
   179  			}
   180  		})
   181  	}
   182  }