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 }