github.com/iotexproject/iotex-core@v1.14.1-rc1/ioctl/newcmd/jwt/jwtsign_test.go (about)

     1  package jwt
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/ethereum/go-ethereum/accounts/keystore"
     8  	"github.com/golang/mock/gomock"
     9  	"github.com/iotexproject/iotex-address/address"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/iotexproject/iotex-core/ioctl/config"
    13  	"github.com/iotexproject/iotex-core/ioctl/util"
    14  	"github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient"
    15  )
    16  
    17  func TestNewJwtSignCmd(t *testing.T) {
    18  	require := require.New(t)
    19  	ctrl := gomock.NewController(t)
    20  	defer ctrl.Finish()
    21  	client := mock_ioctlclient.NewMockClient(ctrl)
    22  
    23  	ks := keystore.NewKeyStore(t.TempDir(), 2, 1)
    24  	acc, err := ks.NewAccount("")
    25  	require.NoError(err)
    26  	accAddr, err := address.FromBytes(acc.Address.Bytes())
    27  	require.NoError(err)
    28  
    29  	client.EXPECT().SelectTranslation(gomock.Any()).Return("jwt", config.English).AnyTimes()
    30  	client.EXPECT().IsCryptoSm2().Return(false).Times(4)
    31  	client.EXPECT().ReadSecret().Return("", nil).Times(2)
    32  	client.EXPECT().NewKeyStore().Return(ks).Times(4)
    33  	client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return(accAddr.String(), nil).Times(2)
    34  	client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).AnyTimes()
    35  
    36  	t.Run("sign jwt with no arg", func(t *testing.T) {
    37  		cmd := NewJwtSignCmd(client)
    38  		result, err := util.ExecuteCmd(cmd)
    39  		require.NoError(err)
    40  		require.Contains(result, "address: "+accAddr.String())
    41  		require.Contains(result, `"exp": "0"`)
    42  	})
    43  
    44  	t.Run("sign jwt with arg", func(t *testing.T) {
    45  		cmd := NewJwtSignCmd(client)
    46  		result, err := util.ExecuteCmd(cmd, "--with-arguments", `{"exp":"-10"}`)
    47  		require.NoError(err)
    48  		require.Contains(result, "address: "+accAddr.String())
    49  		require.Contains(result, `"exp": "-10"`)
    50  	})
    51  
    52  	t.Run("failed to get signer address", func(t *testing.T) {
    53  		expectedErr := errors.New("failed to get signer address")
    54  		client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("", expectedErr)
    55  
    56  		cmd := NewJwtSignCmd(client)
    57  		_, err := util.ExecuteCmd(cmd)
    58  		require.Contains(err.Error(), expectedErr.Error())
    59  	})
    60  
    61  	t.Run("failed to unmarshal arguments", func(t *testing.T) {
    62  		expectedErr := errors.New("failed to unmarshal arguments")
    63  
    64  		cmd := NewJwtSignCmd(client)
    65  		_, err := util.ExecuteCmd(cmd, "--with-arguments", "test")
    66  		require.Contains(err.Error(), expectedErr.Error())
    67  	})
    68  }