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  }