github.com/Finschia/finschia-sdk@v0.49.1/x/auth/vesting/handler_test.go (about) 1 package vesting_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/suite" 7 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 8 9 "github.com/Finschia/finschia-sdk/simapp" 10 sdk "github.com/Finschia/finschia-sdk/types" 11 "github.com/Finschia/finschia-sdk/x/auth/vesting" 12 "github.com/Finschia/finschia-sdk/x/auth/vesting/types" 13 ) 14 15 type HandlerTestSuite struct { 16 suite.Suite 17 18 handler sdk.Handler 19 app *simapp.SimApp 20 } 21 22 func (suite *HandlerTestSuite) SetupTest() { 23 checkTx := false 24 app := simapp.Setup(checkTx) 25 26 suite.handler = vesting.NewHandler(app.AccountKeeper, app.BankKeeper) 27 suite.app = app 28 } 29 30 func (suite *HandlerTestSuite) TestMsgCreateVestingAccount() { 31 ctx := suite.app.BaseApp.NewContext(false, tmproto.Header{Height: suite.app.LastBlockHeight() + 1}) 32 33 balances := sdk.NewCoins(sdk.NewInt64Coin("test", 1000)) 34 addr1 := sdk.AccAddress([]byte("addr1_______________")) 35 addr2 := sdk.AccAddress([]byte("addr2_______________")) 36 addr3 := sdk.AccAddress([]byte("addr3_______________")) 37 38 acc1 := suite.app.AccountKeeper.NewAccountWithAddress(ctx, addr1) 39 suite.app.AccountKeeper.SetAccount(ctx, acc1) 40 suite.Require().NoError(simapp.FundAccount(suite.app, ctx, addr1, balances)) 41 42 testCases := []struct { 43 name string 44 msg *types.MsgCreateVestingAccount 45 expectErr bool 46 }{ 47 { 48 name: "create delayed vesting account", 49 msg: types.NewMsgCreateVestingAccount(addr1, addr2, sdk.NewCoins(sdk.NewInt64Coin("test", 100)), ctx.BlockTime().Unix()+10000, true), 50 expectErr: false, 51 }, 52 { 53 name: "create continuous vesting account", 54 msg: types.NewMsgCreateVestingAccount(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("test", 100)), ctx.BlockTime().Unix()+10000, false), 55 expectErr: false, 56 }, 57 { 58 name: "continuous vesting account already exists", 59 msg: types.NewMsgCreateVestingAccount(addr1, addr3, sdk.NewCoins(sdk.NewInt64Coin("test", 100)), ctx.BlockTime().Unix()+10000, false), 60 expectErr: true, 61 }, 62 } 63 64 for _, tc := range testCases { 65 suite.Run(tc.name, func() { 66 res, err := suite.handler(ctx, tc.msg) 67 if tc.expectErr { 68 suite.Require().Error(err) 69 } else { 70 suite.Require().NoError(err) 71 suite.Require().NotNil(res) 72 73 toAddr, err := sdk.AccAddressFromBech32(tc.msg.ToAddress) 74 suite.Require().NoError(err) 75 accI := suite.app.AccountKeeper.GetAccount(ctx, toAddr) 76 suite.Require().NotNil(accI) 77 78 if tc.msg.Delayed { 79 acc, ok := accI.(*types.DelayedVestingAccount) 80 suite.Require().True(ok) 81 suite.Require().Equal(tc.msg.Amount, acc.GetVestingCoins(ctx.BlockTime())) 82 } else { 83 acc, ok := accI.(*types.ContinuousVestingAccount) 84 suite.Require().True(ok) 85 suite.Require().Equal(tc.msg.Amount, acc.GetVestingCoins(ctx.BlockTime())) 86 } 87 } 88 }) 89 } 90 } 91 92 func TestHandlerTestSuite(t *testing.T) { 93 suite.Run(t, new(HandlerTestSuite)) 94 }