github.com/Finschia/finschia-sdk@v0.49.1/x/feegrant/keeper/msg_server_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	codectypes "github.com/Finschia/finschia-sdk/codec/types"
     5  	"github.com/Finschia/finschia-sdk/x/feegrant"
     6  )
     7  
     8  func (suite *KeeperTestSuite) TestGrantAllowance() {
     9  	oneYear := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
    10  
    11  	testCases := []struct {
    12  		name      string
    13  		req       func() *feegrant.MsgGrantAllowance
    14  		expectErr bool
    15  		errMsg    string
    16  	}{
    17  		{
    18  			"invalid granter address",
    19  			func() *feegrant.MsgGrantAllowance {
    20  				any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{})
    21  				suite.Require().NoError(err)
    22  				return &feegrant.MsgGrantAllowance{
    23  					Granter:   "invalid-granter",
    24  					Grantee:   suite.addrs[1].String(),
    25  					Allowance: any,
    26  				}
    27  			},
    28  			true,
    29  			"decoding bech32 failed",
    30  		},
    31  		{
    32  			"invalid grantee address",
    33  			func() *feegrant.MsgGrantAllowance {
    34  				any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{})
    35  				suite.Require().NoError(err)
    36  				return &feegrant.MsgGrantAllowance{
    37  					Granter:   suite.addrs[0].String(),
    38  					Grantee:   "invalid-grantee",
    39  					Allowance: any,
    40  				}
    41  			},
    42  			true,
    43  			"decoding bech32 failed",
    44  		},
    45  		{
    46  			"valid: basic fee allowance",
    47  			func() *feegrant.MsgGrantAllowance {
    48  				any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{
    49  					SpendLimit: suite.atom,
    50  					Expiration: &oneYear,
    51  				})
    52  				suite.Require().NoError(err)
    53  				return &feegrant.MsgGrantAllowance{
    54  					Granter:   suite.addrs[0].String(),
    55  					Grantee:   suite.addrs[1].String(),
    56  					Allowance: any,
    57  				}
    58  			},
    59  			false,
    60  			"",
    61  		},
    62  		{
    63  			"fail: fee allowance exists",
    64  			func() *feegrant.MsgGrantAllowance {
    65  				any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{
    66  					SpendLimit: suite.atom,
    67  					Expiration: &oneYear,
    68  				})
    69  				suite.Require().NoError(err)
    70  				return &feegrant.MsgGrantAllowance{
    71  					Granter:   suite.addrs[0].String(),
    72  					Grantee:   suite.addrs[1].String(),
    73  					Allowance: any,
    74  				}
    75  			},
    76  			true,
    77  			"fee allowance already exists",
    78  		},
    79  		{
    80  			"valid: periodic fee allowance",
    81  			func() *feegrant.MsgGrantAllowance {
    82  				any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
    83  					Basic: feegrant.BasicAllowance{
    84  						SpendLimit: suite.atom,
    85  						Expiration: &oneYear,
    86  					},
    87  				})
    88  				suite.Require().NoError(err)
    89  				return &feegrant.MsgGrantAllowance{
    90  					Granter:   suite.addrs[1].String(),
    91  					Grantee:   suite.addrs[2].String(),
    92  					Allowance: any,
    93  				}
    94  			},
    95  			false,
    96  			"",
    97  		},
    98  		{
    99  			"error: fee allowance exists",
   100  			func() *feegrant.MsgGrantAllowance {
   101  				any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
   102  					Basic: feegrant.BasicAllowance{
   103  						SpendLimit: suite.atom,
   104  						Expiration: &oneYear,
   105  					},
   106  				})
   107  				suite.Require().NoError(err)
   108  				return &feegrant.MsgGrantAllowance{
   109  					Granter:   suite.addrs[1].String(),
   110  					Grantee:   suite.addrs[2].String(),
   111  					Allowance: any,
   112  				}
   113  			},
   114  			true,
   115  			"fee allowance already exists",
   116  		},
   117  	}
   118  	for _, tc := range testCases {
   119  		suite.Run(tc.name, func() {
   120  			_, err := suite.msgSrvr.GrantAllowance(suite.ctx, tc.req())
   121  			if tc.expectErr {
   122  				suite.Require().Error(err)
   123  				suite.Require().Contains(err.Error(), tc.errMsg)
   124  			}
   125  		})
   126  	}
   127  }
   128  
   129  func (suite *KeeperTestSuite) TestRevokeAllowance() {
   130  	oneYear := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
   131  
   132  	testCases := []struct {
   133  		name      string
   134  		request   *feegrant.MsgRevokeAllowance
   135  		preRun    func()
   136  		expectErr bool
   137  		errMsg    string
   138  	}{
   139  		{
   140  			"error: invalid granter",
   141  			&feegrant.MsgRevokeAllowance{
   142  				Granter: "invalid-granter",
   143  				Grantee: suite.addrs[1].String(),
   144  			},
   145  			func() {},
   146  			true,
   147  			"decoding bech32 failed",
   148  		},
   149  		{
   150  			"error: invalid grantee",
   151  			&feegrant.MsgRevokeAllowance{
   152  				Granter: suite.addrs[0].String(),
   153  				Grantee: "invalid-grantee",
   154  			},
   155  			func() {},
   156  			true,
   157  			"decoding bech32 failed",
   158  		},
   159  		{
   160  			"error: fee allowance not found",
   161  			&feegrant.MsgRevokeAllowance{
   162  				Granter: suite.addrs[0].String(),
   163  				Grantee: suite.addrs[1].String(),
   164  			},
   165  			func() {},
   166  			true,
   167  			"fee-grant not found",
   168  		},
   169  		{
   170  			"success: revoke fee allowance",
   171  			&feegrant.MsgRevokeAllowance{
   172  				Granter: suite.addrs[0].String(),
   173  				Grantee: suite.addrs[1].String(),
   174  			},
   175  			func() {
   176  				// removing fee allowance from previous tests if exists
   177  				_, err := suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{
   178  					Granter: suite.addrs[0].String(),
   179  					Grantee: suite.addrs[1].String(),
   180  				})
   181  				suite.Require().Error(err)
   182  
   183  				any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
   184  					Basic: feegrant.BasicAllowance{
   185  						SpendLimit: suite.atom,
   186  						Expiration: &oneYear,
   187  					},
   188  				})
   189  				suite.Require().NoError(err)
   190  				req := &feegrant.MsgGrantAllowance{
   191  					Granter:   suite.addrs[0].String(),
   192  					Grantee:   suite.addrs[1].String(),
   193  					Allowance: any,
   194  				}
   195  				_, err = suite.msgSrvr.GrantAllowance(suite.ctx, req)
   196  				suite.Require().NoError(err)
   197  			},
   198  			false,
   199  			"",
   200  		},
   201  		{
   202  			"error: check fee allowance revoked",
   203  			&feegrant.MsgRevokeAllowance{
   204  				Granter: suite.addrs[0].String(),
   205  				Grantee: suite.addrs[1].String(),
   206  			},
   207  			func() {},
   208  			true,
   209  			"fee-grant not found",
   210  		},
   211  	}
   212  
   213  	for _, tc := range testCases {
   214  		suite.Run(tc.name, func() {
   215  			tc.preRun()
   216  			_, err := suite.msgSrvr.RevokeAllowance(suite.ctx, tc.request)
   217  			if tc.expectErr {
   218  				suite.Require().Error(err)
   219  				suite.Require().Contains(err.Error(), tc.errMsg)
   220  			}
   221  		})
   222  	}
   223  }