github.com/Finschia/finschia-sdk@v0.49.1/x/auth/keeper/grpc_query_test.go (about) 1 package keeper_test 2 3 import ( 4 "fmt" 5 6 "github.com/Finschia/finschia-sdk/testutil/testdata" 7 sdk "github.com/Finschia/finschia-sdk/types" 8 "github.com/Finschia/finschia-sdk/x/auth/types" 9 ) 10 11 func (suite *KeeperTestSuite) TestGRPCQueryAccounts() { 12 var req *types.QueryAccountsRequest 13 _, _, first := testdata.KeyTestPubAddr() 14 _, _, second := testdata.KeyTestPubAddr() 15 16 testCases := []struct { 17 msg string 18 malleate func() 19 expPass bool 20 posttests func(res *types.QueryAccountsResponse) 21 }{ 22 { 23 "success", 24 func() { 25 suite.app.AccountKeeper.SetAccount(suite.ctx, 26 suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, first)) 27 suite.app.AccountKeeper.SetAccount(suite.ctx, 28 suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, second)) 29 req = &types.QueryAccountsRequest{} 30 }, 31 true, 32 func(res *types.QueryAccountsResponse) { 33 for _, acc := range res.Accounts { 34 var account types.AccountI 35 err := suite.app.InterfaceRegistry().UnpackAny(acc, &account) 36 suite.Require().NoError(err) 37 38 suite.Require().True( 39 first.Equals(account.GetAddress()) || second.Equals(account.GetAddress())) 40 } 41 }, 42 }, 43 } 44 45 for _, tc := range testCases { 46 suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { 47 suite.SetupTest() // reset 48 49 tc.malleate() 50 ctx := sdk.WrapSDKContext(suite.ctx) 51 52 res, err := suite.queryClient.Accounts(ctx, req) 53 54 if tc.expPass { 55 suite.Require().NoError(err) 56 suite.Require().NotNil(res) 57 } else { 58 suite.Require().Error(err) 59 suite.Require().Nil(res) 60 } 61 62 tc.posttests(res) 63 }) 64 } 65 } 66 67 func (suite *KeeperTestSuite) TestGRPCQueryAccount() { 68 var req *types.QueryAccountRequest 69 _, _, addr := testdata.KeyTestPubAddr() 70 71 testCases := []struct { 72 msg string 73 malleate func() 74 expPass bool 75 posttests func(res *types.QueryAccountResponse) 76 }{ 77 { 78 "empty request", 79 func() { 80 req = &types.QueryAccountRequest{} 81 }, 82 false, 83 func(res *types.QueryAccountResponse) {}, 84 }, 85 { 86 "invalid request", 87 func() { 88 req = &types.QueryAccountRequest{Address: ""} 89 }, 90 false, 91 func(res *types.QueryAccountResponse) {}, 92 }, 93 { 94 "invalid request with empty byte array", 95 func() { 96 req = &types.QueryAccountRequest{Address: ""} 97 }, 98 false, 99 func(res *types.QueryAccountResponse) {}, 100 }, 101 { 102 "account not found", 103 func() { 104 req = &types.QueryAccountRequest{Address: addr.String()} 105 }, 106 false, 107 func(res *types.QueryAccountResponse) {}, 108 }, 109 { 110 "success", 111 func() { 112 suite.app.AccountKeeper.SetAccount(suite.ctx, 113 suite.app.AccountKeeper.NewAccountWithAddress(suite.ctx, addr)) 114 req = &types.QueryAccountRequest{Address: addr.String()} 115 }, 116 true, 117 func(res *types.QueryAccountResponse) { 118 var newAccount types.AccountI 119 err := suite.app.InterfaceRegistry().UnpackAny(res.Account, &newAccount) 120 suite.Require().NoError(err) 121 suite.Require().NotNil(newAccount) 122 suite.Require().True(addr.Equals(newAccount.GetAddress())) 123 }, 124 }, 125 } 126 127 for _, tc := range testCases { 128 suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { 129 suite.SetupTest() // reset 130 131 tc.malleate() 132 ctx := sdk.WrapSDKContext(suite.ctx) 133 134 res, err := suite.queryClient.Account(ctx, req) 135 136 if tc.expPass { 137 suite.Require().NoError(err) 138 suite.Require().NotNil(res) 139 } else { 140 suite.Require().Error(err) 141 suite.Require().Nil(res) 142 } 143 144 tc.posttests(res) 145 }) 146 } 147 } 148 149 func (suite *KeeperTestSuite) TestGRPCQueryParameters() { 150 var ( 151 req *types.QueryParamsRequest 152 expParams types.Params 153 ) 154 155 testCases := []struct { 156 msg string 157 malleate func() 158 expPass bool 159 }{ 160 { 161 "success", 162 func() { 163 req = &types.QueryParamsRequest{} 164 expParams = suite.app.AccountKeeper.GetParams(suite.ctx) 165 }, 166 true, 167 }, 168 } 169 170 for _, tc := range testCases { 171 suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { 172 suite.SetupTest() // reset 173 174 tc.malleate() 175 ctx := sdk.WrapSDKContext(suite.ctx) 176 177 res, err := suite.queryClient.Params(ctx, req) 178 179 if tc.expPass { 180 suite.Require().NoError(err) 181 suite.Require().NotNil(res) 182 suite.Require().Equal(expParams, res.Params) 183 } else { 184 suite.Require().Error(err) 185 suite.Require().Nil(res) 186 } 187 }) 188 } 189 } 190 191 func (suite *KeeperTestSuite) TestGRPCQueryModuleAccountByName() { 192 var req *types.QueryModuleAccountByNameRequest 193 194 testCases := []struct { 195 msg string 196 malleate func() 197 expPass bool 198 posttests func(res *types.QueryModuleAccountByNameResponse) 199 }{ 200 { 201 "success", 202 func() { 203 req = &types.QueryModuleAccountByNameRequest{Name: "mint"} 204 }, 205 true, 206 func(res *types.QueryModuleAccountByNameResponse) { 207 var account types.AccountI 208 err := suite.app.InterfaceRegistry().UnpackAny(res.Account, &account) 209 suite.Require().NoError(err) 210 211 moduleAccount, ok := account.(types.ModuleAccountI) 212 suite.Require().True(ok) 213 suite.Require().Equal(moduleAccount.GetName(), "mint") 214 }, 215 }, 216 { 217 "invalid module name", 218 func() { 219 req = &types.QueryModuleAccountByNameRequest{Name: "gover"} 220 }, 221 false, 222 func(res *types.QueryModuleAccountByNameResponse) { 223 }, 224 }, 225 } 226 227 for _, tc := range testCases { 228 suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { 229 suite.SetupTest() // reset 230 tc.malleate() 231 ctx := sdk.WrapSDKContext(suite.ctx) 232 res, err := suite.queryClient.ModuleAccountByName(ctx, req) 233 if tc.expPass { 234 suite.Require().NoError(err) 235 suite.Require().NotNil(res) 236 } else { 237 suite.Require().Error(err) 238 suite.Require().Nil(res) 239 } 240 241 tc.posttests(res) 242 }) 243 } 244 } 245 246 func (suite *KeeperTestSuite) TestGRPCQueryNextAccountNumber() { 247 var req *types.QueryNextAccountNumberRequest 248 249 testCases := []struct { 250 msg string 251 malleate func() 252 expPass bool 253 }{ 254 { 255 "success", 256 func() { 257 req = &types.QueryNextAccountNumberRequest{} 258 }, 259 true, 260 }, 261 } 262 263 for _, tc := range testCases { 264 suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { 265 suite.SetupTest() // reset 266 tc.malleate() 267 ctx := sdk.WrapSDKContext(suite.ctx) 268 res, err := suite.queryClient.NextAccountNumber(ctx, req) 269 if tc.expPass { 270 suite.Require().NoError(err) 271 suite.Require().NotNil(res) 272 } else { 273 suite.Require().Error(err) 274 suite.Require().Nil(res) 275 } 276 }) 277 } 278 }