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 }