cosmos-sdk/x/bank/types/send_authorization_test.go

59 lines
1.9 KiB
Go

package types_test
import (
"testing"
"github.com/stretchr/testify/require"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/bank/types"
)
var (
coins1000 = sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1000)))
coins500 = sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(500)))
fromAddr = sdk.AccAddress("_____from _____")
toAddr = sdk.AccAddress("_______to________")
)
func TestSendAuthorization(t *testing.T) {
app := simapp.Setup(t, false)
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
authorization := types.NewSendAuthorization(coins1000)
t.Log("verify authorization returns valid method name")
require.Equal(t, authorization.MsgTypeURL(), "/cosmos.bank.v1beta1.MsgSend")
require.NoError(t, authorization.ValidateBasic())
send := types.NewMsgSend(fromAddr, toAddr, coins1000)
require.NoError(t, authorization.ValidateBasic())
t.Log("verify updated authorization returns nil")
resp, err := authorization.Accept(ctx, send)
require.NoError(t, err)
require.True(t, resp.Delete)
require.Nil(t, resp.Updated)
authorization = types.NewSendAuthorization(coins1000)
require.Equal(t, authorization.MsgTypeURL(), "/cosmos.bank.v1beta1.MsgSend")
require.NoError(t, authorization.ValidateBasic())
send = types.NewMsgSend(fromAddr, toAddr, coins500)
require.NoError(t, authorization.ValidateBasic())
resp, err = authorization.Accept(ctx, send)
t.Log("verify updated authorization returns remaining spent limit")
require.NoError(t, err)
require.False(t, resp.Delete)
require.NotNil(t, resp.Updated)
sendAuth := types.NewSendAuthorization(coins500)
require.Equal(t, sendAuth.String(), resp.Updated.String())
t.Log("expect updated authorization nil after spending remaining amount")
resp, err = resp.Updated.Accept(ctx, send)
require.NoError(t, err)
require.True(t, resp.Delete)
require.Nil(t, resp.Updated)
}