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 }