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  }