Skip to content

Commit

Permalink
return error for AskToConfirm
Browse files Browse the repository at this point in the history
  • Loading branch information
huof6829 committed Jul 21, 2022
1 parent 0039849 commit 5768c70
Show file tree
Hide file tree
Showing 12 changed files with 49 additions and 27 deletions.
9 changes: 4 additions & 5 deletions ioctl/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ type (
// SelectTranslation select a translation based on UILanguage
SelectTranslation(map[config.Language]string) (string, config.Language)
// AskToConfirm asks user to confirm from terminal, true to continue
AskToConfirm(string) bool
AskToConfirm(string) (bool, error)
// ReadSecret reads password from terminal
ReadSecret() (string, error)
// Execute a bash command
Expand Down Expand Up @@ -173,15 +173,14 @@ func (c *client) SetInsecureWithFlag(cb func(*bool, string, bool, string)) {
cb(&c.insecure, "insecure", !c.cfg.SecureConnect, usage)
}

func (c *client) AskToConfirm(info string) bool {
func (c *client) AskToConfirm(info string) (bool, error) {
message := ConfirmationMessage{Info: info, Options: []string{"yes"}}
fmt.Println(message.String())
var confirm string
if _, err := fmt.Scanf("%s", &confirm); err != nil {
fmt.Println(err)
return false
return false, err
}
return strings.EqualFold(confirm, "yes")
return strings.EqualFold(confirm, "yes"), nil
}

func (c *client) SelectTranslation(trls map[config.Language]string) (string, config.Language) {
Expand Down
5 changes: 3 additions & 2 deletions ioctl/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@ func TestAskToConfirm(t *testing.T) {
r := require.New(t)
c := NewClient(config.Config{}, "")
defer c.Stop(context.Background())
blang := c.AskToConfirm("test")
confirmed, err := c.AskToConfirm("test")
// no input
r.False(blang)
r.Equal("EOF", err.Error())
r.False(confirmed)
}

func TestAPIServiceClient(t *testing.T) {
Expand Down
6 changes: 5 additions & 1 deletion ioctl/newcmd/account/accountcreateadd.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,11 @@ func NewAccountCreateAdd(client ioctl.Client) *cobra.Command {
}

if addr, ok := client.Config().Aliases[args[0]]; ok {
if !client.AskToConfirm(fmt.Sprintf(_aliasHasAlreadyUsed, args[0], addr)) {
confirmed, err := client.AskToConfirm(fmt.Sprintf(_aliasHasAlreadyUsed, args[0], addr))
if err != nil {
return errors.Wrap(err, "failed to ask confirm")
}
if !confirmed {
cmd.Println(infoQuit)
return nil
}
Expand Down
4 changes: 2 additions & 2 deletions ioctl/newcmd/account/accountcreateadd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func TestNewAccountCreateAdd(t *testing.T) {
require.NoError(err)

client.EXPECT().ReadSecret().Return(pwd, nil).Times(4)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true).Times(2)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2)
client.EXPECT().Config().Return(config.Config{
Wallet: testWallet,
Aliases: map[string]string{
Expand Down Expand Up @@ -57,7 +57,7 @@ func TestNewAccountCreateAdd(t *testing.T) {
})

t.Run("failed to confirm", func(t *testing.T) {
client.EXPECT().AskToConfirm(gomock.Any()).Return(false)
client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil)

cmd := NewAccountCreateAdd(client)
_, err := util.ExecuteCmd(cmd, "aaa")
Expand Down
10 changes: 7 additions & 3 deletions ioctl/newcmd/account/accountdelete.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,18 @@ func NewAccountDelete(client ioctl.Client) *cobra.Command {
if _, err = os.Stat(filePath); err != nil {
return errors.Wrapf(err, _failToFindAccount, addr)
}
if !client.AskToConfirm(_infoWarn) {
confirmed, err := client.AskToConfirm(_infoWarn)
if err != nil {
return errors.Wrap(err, "failed to ask confirm")
}
if !confirmed {
cmd.Println(_infoQuit)
return nil
}
if err := os.Remove(filePath); err != nil {
if err = os.Remove(filePath); err != nil {
return errors.Wrap(err, _failToRemoveKeystoreFile)
}
if err := client.DeleteAlias(client.AliasMap()[addr]); err != nil {
if err = client.DeleteAlias(client.AliasMap()[addr]); err != nil {
return errors.Wrap(err, _failToWriteToConfigFile)
}
cmd.Println(fmt.Sprintf(_resultSuccess, addr))
Expand Down
6 changes: 3 additions & 3 deletions ioctl/newcmd/account/accountdelete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ func TestNewAccountDelete(t *testing.T) {
"io1uwnr55vqmhf3xeg5phgurlyl702af6eju542s1": "ccc",
})

client.EXPECT().AskToConfirm(gomock.Any()).Return(false)
client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil)
cmd := NewAccountDelete(client)
_, err := util.ExecuteCmd(cmd)
require.NoError(err)

client.EXPECT().AskToConfirm(gomock.Any()).Return(true)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil)
client.EXPECT().DeleteAlias("aaa").Return(nil)
cmd = NewAccountDelete(client)
result, err := util.ExecuteCmd(cmd)
Expand Down Expand Up @@ -82,7 +82,7 @@ func TestNewAccountDelete(t *testing.T) {
crypto.WritePrivateKeyToPem(pemFilePath, priKey2.(*crypto.P256sm2PrvKey), "test")
client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return(addr2.String(), nil)

client.EXPECT().AskToConfirm(gomock.Any()).Return(true)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil)
client.EXPECT().DeleteAlias("aaa").Return(nil)
cmd := NewAccountDelete(client)
result, err := util.ExecuteCmd(cmd)
Expand Down
8 changes: 6 additions & 2 deletions ioctl/newcmd/action/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -396,10 +396,14 @@ func SendAction(client ioctl.Client, cmd *cobra.Command, elp action.Envelope, si
if !getAssumeYesFlagValue(cmd) {
infoWarn := selectTranslation(client, _infoWarn)
infoQuit := selectTranslation(client, _infoQuit)
if !client.AskToConfirm(infoWarn) {
confirmed, err := client.AskToConfirm(infoWarn)
if err != nil {
return errors.Wrap(err, "failed to ask confirm")
}
if !confirmed {
cmd.Println(infoQuit)
return nil
}
return nil
}

return SendRaw(client, cmd, selp)
Expand Down
7 changes: 6 additions & 1 deletion ioctl/newcmd/hdwallet/hdwalletdelete.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ package hdwallet
import (
"fmt"

"github.com/pkg/errors"
"github.com/spf13/cobra"

"github.com/iotexproject/iotex-core/ioctl"
Expand Down Expand Up @@ -36,7 +37,11 @@ func NewHdwalletDeleteCmd(client ioctl.Client) *cobra.Command {
info := fmt.Sprintf("** This is an irreversible action!\n" +
"Once an hdwallet is deleted, all the assets under this hdwallet may be lost!\n" +
"Type 'YES' to continue, quit for anything else.")
if !client.AskToConfirm(info) {
confirmed, err := client.AskToConfirm(info)
if err != nil {
return errors.Wrap(err, "failed to ask confirm")
}
if !confirmed {
cmd.Println("quit")
return nil
}
Expand Down
4 changes: 2 additions & 2 deletions ioctl/newcmd/hdwallet/hdwalletdelete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func TestNewHdwalletDeleteCmd(t *testing.T) {
client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(4)

t.Run("delete hdwallet", func(t *testing.T) {
client.EXPECT().AskToConfirm(gomock.Any()).Return(true)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil)
client.EXPECT().RemoveHdWalletConfigFile().Return(nil)

cmd := NewHdwalletDeleteCmd(client)
Expand All @@ -35,7 +35,7 @@ func TestNewHdwalletDeleteCmd(t *testing.T) {
})

t.Run("quit hdwallet delete command", func(t *testing.T) {
client.EXPECT().AskToConfirm(gomock.Any()).Return(false)
client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil)

cmd := NewHdwalletDeleteCmd(client)
result, err := util.ExecuteCmd(cmd)
Expand Down
8 changes: 6 additions & 2 deletions ioctl/newcmd/update/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,17 @@ func NewUpdateCmd(c ioctl.Client) *cobra.Command {
return errors.New(fmt.Sprintf(invalidVersionType, versionType))
}

if !c.AskToConfirm(_infoWarn) {
confirmed, err := c.AskToConfirm(_infoWarn)
if err != nil {
return errors.Wrap(err, "failed to ask confirm")
}
if !confirmed {
cmd.Println(_infoQuit)
return nil
}
cmd.Printf(info, versionType)

if err := c.Execute(cmdString); err != nil {
if err = c.Execute(cmdString); err != nil {
return errors.Wrap(err, fail)
}
cmd.Println(success)
Expand Down
4 changes: 2 additions & 2 deletions ioctl/newcmd/update/update_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func TestNewUpdateCmd(t *testing.T) {
expectedValue := "ioctl is up-to-date now."
client.EXPECT().SelectTranslation(gomock.Any()).Return(expectedValue,
config.English).Times(18)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true).Times(2)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2)
client.EXPECT().Execute(gomock.Any()).Return(nil).Times(2)

t.Run("update cli with stable", func(t *testing.T) {
Expand All @@ -47,7 +47,7 @@ func TestNewUpdateCmd(t *testing.T) {
expectedError := errors.New("failed to execute bash command")
client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationResult",
config.English).Times(9)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true).Times(1)
client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(1)
client.EXPECT().Execute(gomock.Any()).Return(expectedError).Times(1)

cmd := NewUpdateCmd(client)
Expand Down
5 changes: 3 additions & 2 deletions test/mock/mock_ioctlclient/mock_ioctlclient.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 5768c70

Please sign in to comment.