github.com/iotexproject/iotex-core@v1.14.1-rc1/ioctl/newcmd/contract/contracttestfunction_test.go (about) 1 // Copyright (c) 2022 IoTeX Foundation 2 // This source code is provided 'as is' and no warranties are given as to title or non-infringement, merchantability 3 // or fitness for purpose and, to the extent permitted by law, all liability for your use of the code is disclaimed. 4 // This source code is governed by Apache License 2.0 that can be found in the LICENSE file. 5 6 package contract 7 8 import ( 9 "testing" 10 11 "github.com/golang/mock/gomock" 12 "github.com/iotexproject/iotex-address/address" 13 "github.com/iotexproject/iotex-proto/golang/iotexapi" 14 "github.com/iotexproject/iotex-proto/golang/iotexapi/mock_iotexapi" 15 "github.com/iotexproject/iotex-proto/golang/iotextypes" 16 "github.com/stretchr/testify/require" 17 18 "github.com/iotexproject/iotex-core/ioctl/config" 19 "github.com/iotexproject/iotex-core/ioctl/util" 20 "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" 21 ) 22 23 func TestNewContractTestFunctionCmd(t *testing.T) { 24 require := require.New(t) 25 ctrl := gomock.NewController(t) 26 defer ctrl.Finish() 27 28 t.Run("test_pass", func(t *testing.T) { 29 client := mock_ioctlclient.NewMockClient(ctrl) 30 apiClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) 31 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 32 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 33 _, err := address.FromString(addr) 34 return addr, err 35 }).Times(1) 36 client.EXPECT().APIServiceClient().Return(apiClient, nil).Times(1) 37 client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("", nil).Times(1) 38 apiClient.EXPECT().ReadContract(gomock.Any(), gomock.Any(), gomock.Any()).Return(&iotexapi.ReadContractResponse{}, nil).Times(1) 39 cmd := NewContractTestFunctionCmd(client) 40 result, err := util.ExecuteCmd(cmd, "--with-arguments", `{"recipients":["io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr","io14fmlh7zedcx7tn3k9k744v54nxnv8zky86tjhj"],"amounts":["3123132","123"],"payload":"PLEASE!!!"}`, "io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr", "test.abi", "multiSend", "3.4") 41 require.NoError(err) 42 require.Contains(result, "return") 43 }) 44 45 t.Run("test_output", func(t *testing.T) { 46 client := mock_ioctlclient.NewMockClient(ctrl) 47 apiClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) 48 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 49 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 50 _, err := address.FromString(addr) 51 return addr, err 52 }).Times(1) 53 client.EXPECT().APIServiceClient().Return(apiClient, nil).Times(1) 54 client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("", nil).Times(1) 55 apiClient.EXPECT().ReadContract(gomock.Any(), gomock.Any(), gomock.Any()).Return(&iotexapi.ReadContractResponse{ 56 Data: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b48656c6c6f20576f726c64000000000000000000000000000000000000000000", 57 Receipt: &iotextypes.Receipt{}, 58 }, nil).Times(1) 59 cmd := NewContractTestFunctionCmd(client) 60 result, err := util.ExecuteCmd(cmd, "io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr", "test.abi", "getMessage") 61 require.NoError(err) 62 require.Contains(result, "Hello World") 63 }) 64 65 t.Run("invalid_address", func(t *testing.T) { 66 client := mock_ioctlclient.NewMockClient(ctrl) 67 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 68 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 69 _, err := address.FromString(addr) 70 return addr, err 71 }).Times(1) 72 cmd := NewContractTestFunctionCmd(client) 73 _, err := util.ExecuteCmd(cmd, "--with-arguments", `{"recipients":["io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr","io14fmlh7zedcx7tn3k9k744v54nxnv8zky86tjhj"],"amounts":["3123132","123"],"payload":"PLEASE!!!"}`, "123", "test.abi", "multiSend") 74 require.Contains(err.Error(), "invalid address") 75 }) 76 77 t.Run("abifile_not_exist", func(t *testing.T) { 78 client := mock_ioctlclient.NewMockClient(ctrl) 79 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 80 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 81 _, err := address.FromString(addr) 82 return addr, err 83 }).Times(1) 84 cmd := NewContractTestFunctionCmd(client) 85 _, err := util.ExecuteCmd(cmd, "--with-arguments", `{"recipients":["io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr","io14fmlh7zedcx7tn3k9k744v54nxnv8zky86tjhj"],"amounts":["3123132","123"],"payload":"PLEASE!!!"}`, "io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr", "not_exist.abi", "multiSend") 86 require.Contains(err.Error(), "no such file") 87 }) 88 89 t.Run("invalid_method", func(t *testing.T) { 90 client := mock_ioctlclient.NewMockClient(ctrl) 91 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 92 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 93 _, err := address.FromString(addr) 94 return addr, err 95 }).Times(1) 96 cmd := NewContractTestFunctionCmd(client) 97 _, err := util.ExecuteCmd(cmd, "--with-arguments", `{"recipients":["io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr","io14fmlh7zedcx7tn3k9k744v54nxnv8zky86tjhj"],"amounts":["3123132","123"],"payload":"PLEASE!!!"}`, "io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr", "test.abi", "multiSend1") 98 require.Contains(err.Error(), "invalid method name") 99 }) 100 101 t.Run("invalid_amount", func(t *testing.T) { 102 client := mock_ioctlclient.NewMockClient(ctrl) 103 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 104 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 105 _, err := address.FromString(addr) 106 return addr, err 107 }).Times(1) 108 cmd := NewContractTestFunctionCmd(client) 109 _, err := util.ExecuteCmd(cmd, "--with-arguments", `{"recipients":["io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr","io14fmlh7zedcx7tn3k9k744v54nxnv8zky86tjhj"],"amounts":["3123132","123"],"payload":"PLEASE!!!"}`, "io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr", "test.abi", "multiSend", "amount") 110 require.Contains(err.Error(), "invalid amount") 111 }) 112 113 t.Run("invalid_argument", func(t *testing.T) { 114 client := mock_ioctlclient.NewMockClient(ctrl) 115 client.EXPECT().SelectTranslation(gomock.Any()).Return("test", config.English).MinTimes(2) 116 client.EXPECT().Address(gomock.Any()).DoAndReturn(func(addr string) (string, error) { 117 _, err := address.FromString(addr) 118 return addr, err 119 }).Times(1) 120 cmd := NewContractTestFunctionCmd(client) 121 _, err := util.ExecuteCmd(cmd, "--with-arguments", `{"recipients":"asd"}`, "io1h8zxmdacge966wp6t90a02ncghaa6eptnftfqr", "test.abi", "multiSend", "3.4") 122 require.Contains(err.Error(), "invalid argument") 123 }) 124 }