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