github.com/Finschia/finschia-sdk@v0.48.1/x/bank/handler_test.go (about) 1 package bank_test 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 9 10 "github.com/Finschia/finschia-sdk/crypto/keys/secp256k1" 11 "github.com/Finschia/finschia-sdk/simapp" 12 "github.com/Finschia/finschia-sdk/testutil/testdata" 13 sdk "github.com/Finschia/finschia-sdk/types" 14 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 15 authtypes "github.com/Finschia/finschia-sdk/x/auth/types" 16 "github.com/Finschia/finschia-sdk/x/bank" 17 bankkeeper "github.com/Finschia/finschia-sdk/x/bank/keeper" 18 "github.com/Finschia/finschia-sdk/x/bank/types" 19 stakingtypes "github.com/Finschia/finschia-sdk/x/staking/types" 20 ) 21 22 func TestInvalidMsg(t *testing.T) { 23 h := bank.NewHandler(nil) 24 25 res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) 26 require.Error(t, err) 27 require.Nil(t, res) 28 29 _, _, log := sdkerrors.ABCIInfo(err, false) 30 require.True(t, strings.Contains(log, "unrecognized bank message type")) 31 } 32 33 // A module account cannot be the recipient of bank sends unless it has been marked as such 34 func TestSendToModuleAccount(t *testing.T) { 35 priv1 := secp256k1.GenPrivKey() 36 addr1 := sdk.AccAddress(priv1.PubKey().Address()) 37 moduleAccAddr := authtypes.NewModuleAddress(stakingtypes.BondedPoolName) 38 coins := sdk.Coins{sdk.NewInt64Coin("foocoin", 10)} 39 40 tests := []struct { 41 name string 42 expectedError error 43 msg *types.MsgSend 44 }{ 45 { 46 name: "not allowed module account", 47 msg: types.NewMsgSend(addr1, moduleAccAddr, coins), 48 expectedError: sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", moduleAccAddr), 49 }, 50 { 51 name: "allowed module account", 52 msg: types.NewMsgSend(addr1, authtypes.NewModuleAddress(stakingtypes.ModuleName), coins), 53 expectedError: nil, 54 }, 55 } 56 57 acc1 := &authtypes.BaseAccount{ 58 Address: addr1.String(), 59 } 60 accs := authtypes.GenesisAccounts{acc1} 61 balances := []types.Balance{ 62 { 63 Address: addr1.String(), 64 Coins: coins, 65 }, 66 } 67 68 app := simapp.SetupWithGenesisAccounts(accs, balances...) 69 ctx := app.BaseApp.NewContext(false, tmproto.Header{}) 70 71 app.BankKeeper = bankkeeper.NewBaseKeeper( 72 app.AppCodec(), app.GetKey(types.StoreKey), app.AccountKeeper, app.GetSubspace(types.ModuleName), map[string]bool{ 73 moduleAccAddr.String(): true, 74 }, 75 ) 76 handler := bank.NewHandler(app.BankKeeper) 77 78 for _, tc := range tests { 79 t.Run(tc.name, func(t *testing.T) { 80 _, err := handler(ctx, tc.msg) 81 if tc.expectedError != nil { 82 require.EqualError(t, err, tc.expectedError.Error()) 83 } else { 84 require.NoError(t, err) 85 } 86 }) 87 } 88 }