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  }