github.com/Finschia/finschia-sdk@v0.48.1/x/token/keeper/send_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"fmt"
     5  
     6  	sdk "github.com/Finschia/finschia-sdk/types"
     7  	"github.com/Finschia/finschia-sdk/x/token"
     8  )
     9  
    10  func (s *KeeperTestSuite) TestSend() {
    11  	testCases := map[string]struct {
    12  		amount sdk.Int
    13  		err    error
    14  	}{
    15  		"valid send": {
    16  			amount: sdk.OneInt(),
    17  		},
    18  		"insufficient tokens": {
    19  			amount: s.balance.Add(sdk.OneInt()),
    20  			err:    token.ErrInsufficientBalance,
    21  		},
    22  	}
    23  
    24  	for name, tc := range testCases {
    25  		s.Run(name, func() {
    26  			ctx, _ := s.ctx.CacheContext()
    27  
    28  			err := s.keeper.Send(ctx, s.contractID, s.vendor, s.operator, tc.amount)
    29  			s.Require().ErrorIs(err, tc.err)
    30  			if tc.err != nil {
    31  				return
    32  			}
    33  
    34  			vendorBalance := s.keeper.GetBalance(ctx, s.contractID, s.vendor)
    35  			s.Require().True(s.balance.Sub(tc.amount).Equal(vendorBalance))
    36  
    37  			operatorBalance := s.keeper.GetBalance(ctx, s.contractID, s.operator)
    38  			s.Require().True(s.balance.Add(tc.amount).Equal(operatorBalance))
    39  		})
    40  	}
    41  }
    42  
    43  func (s *KeeperTestSuite) TestAuthorizeOperator() {
    44  	userDescriptions := map[string]string{
    45  		s.vendor.String():   "vendor",
    46  		s.operator.String(): "operator",
    47  		s.customer.String(): "customer",
    48  		s.stranger.String(): "stranger",
    49  	}
    50  	for operatorStr, operatorDesc := range userDescriptions {
    51  		operator, err := sdk.AccAddressFromBech32(operatorStr)
    52  		s.Require().NoError(err)
    53  		for fromStr, fromDesc := range userDescriptions {
    54  			from, err := sdk.AccAddressFromBech32(fromStr)
    55  			s.Require().NoError(err)
    56  			name := fmt.Sprintf("Operator: %s, From: %s", operatorDesc, fromDesc)
    57  			s.Run(name, func() {
    58  				ctx, _ := s.ctx.CacheContext()
    59  
    60  				_, queryErr := s.keeper.GetAuthorization(ctx, s.contractID, from, operator)
    61  				err := s.keeper.AuthorizeOperator(ctx, s.contractID, from, operator)
    62  				if queryErr == nil { // authorize must fail
    63  					s.Require().ErrorIs(err, token.ErrTokenAlreadyApproved)
    64  				} else {
    65  					s.Require().ErrorIs(queryErr, token.ErrTokenNotApproved)
    66  					s.Require().NoError(err)
    67  					_, queryErr := s.keeper.GetAuthorization(ctx, s.contractID, from, operator)
    68  					s.Require().NoError(queryErr)
    69  				}
    70  			})
    71  		}
    72  	}
    73  }
    74  
    75  func (s *KeeperTestSuite) TestRevokeOperator() {
    76  	userDescriptions := map[string]string{
    77  		s.vendor.String():   "vendor",
    78  		s.operator.String(): "operator",
    79  		s.customer.String(): "customer",
    80  	}
    81  	for operatorStr, operatorDesc := range userDescriptions {
    82  		operator, err := sdk.AccAddressFromBech32(operatorStr)
    83  		s.Require().NoError(err)
    84  		for fromStr, fromDesc := range userDescriptions {
    85  			from, err := sdk.AccAddressFromBech32(fromStr)
    86  			s.Require().NoError(err)
    87  			name := fmt.Sprintf("Operator: %s, From: %s", operatorDesc, fromDesc)
    88  			s.Run(name, func() {
    89  				ctx, _ := s.ctx.CacheContext()
    90  
    91  				_, queryErr := s.keeper.GetAuthorization(ctx, s.contractID, from, operator)
    92  				err := s.keeper.RevokeOperator(ctx, s.contractID, from, operator)
    93  				if queryErr != nil { // revoke must fail
    94  					s.Require().ErrorIs(queryErr, token.ErrTokenNotApproved)
    95  					s.Require().ErrorIs(err, token.ErrTokenNotApproved)
    96  				} else {
    97  					s.Require().NoError(err)
    98  					_, queryErr := s.keeper.GetAuthorization(ctx, s.contractID, from, operator)
    99  					s.Require().ErrorIs(queryErr, token.ErrTokenNotApproved)
   100  				}
   101  			})
   102  		}
   103  	}
   104  }