diff --git a/pkg/cmd/repo/fork/fork.go b/pkg/cmd/repo/fork/fork.go index 087d7219e..0d2d1da69 100644 --- a/pkg/cmd/repo/fork/fork.go +++ b/pkg/cmd/repo/fork/fork.go @@ -19,13 +19,16 @@ import ( "github.com/cli/cli/v2/pkg/cmd/repo/shared" "github.com/cli/cli/v2/pkg/cmdutil" "github.com/cli/cli/v2/pkg/iostreams" - "github.com/cli/cli/v2/pkg/prompt" "github.com/spf13/cobra" "github.com/spf13/pflag" ) const defaultRemoteName = "origin" +type iprompter interface { + Confirm(string, bool) (bool, error) +} + type ForkOptions struct { HttpClient func() (*http.Client, error) GitClient *git.Client @@ -35,6 +38,7 @@ type ForkOptions struct { Remotes func() (ghContext.Remotes, error) Since func(time.Time) time.Duration BackOff backoff.BackOff + Prompter iprompter GitArgs []string Repository string @@ -65,6 +69,7 @@ func NewCmdFork(f *cmdutil.Factory, runF func(*ForkOptions) error) *cobra.Comman Config: f.Config, BaseRepo: f.BaseRepo, Remotes: f.Remotes, + Prompter: f.Prompter, Since: time.Since, } @@ -273,10 +278,9 @@ func forkRun(opts *ForkOptions) error { remoteDesired := opts.Remote if opts.PromptRemote { - //nolint:staticcheck // SA1019: prompt.Confirm is deprecated: use Prompter - err = prompt.Confirm("Would you like to add a remote for the fork?", &remoteDesired) + remoteDesired, err = opts.Prompter.Confirm("Would you like to add a remote for the fork?", false) if err != nil { - return fmt.Errorf("failed to prompt: %w", err) + return err } } @@ -317,10 +321,9 @@ func forkRun(opts *ForkOptions) error { } else { cloneDesired := opts.Clone if opts.PromptClone { - //nolint:staticcheck // SA1019: prompt.Confirm is deprecated: use Prompter - err = prompt.Confirm("Would you like to clone the fork?", &cloneDesired) + cloneDesired, err = opts.Prompter.Confirm("Would you like to clone the fork?", false) if err != nil { - return fmt.Errorf("failed to prompt: %w", err) + return err } } if cloneDesired { diff --git a/pkg/cmd/repo/fork/fork_test.go b/pkg/cmd/repo/fork/fork_test.go index 5833acb5d..f59fba1b7 100644 --- a/pkg/cmd/repo/fork/fork_test.go +++ b/pkg/cmd/repo/fork/fork_test.go @@ -14,11 +14,11 @@ import ( "github.com/cli/cli/v2/git" "github.com/cli/cli/v2/internal/config" "github.com/cli/cli/v2/internal/ghrepo" + "github.com/cli/cli/v2/internal/prompter" "github.com/cli/cli/v2/internal/run" "github.com/cli/cli/v2/pkg/cmdutil" "github.com/cli/cli/v2/pkg/httpmock" "github.com/cli/cli/v2/pkg/iostreams" - "github.com/cli/cli/v2/pkg/prompt" "github.com/google/shlex" "github.com/stretchr/testify/assert" ) @@ -205,18 +205,18 @@ func TestRepoFork(t *testing.T) { } tests := []struct { - name string - opts *ForkOptions - tty bool - httpStubs func(*httpmock.Registry) - execStubs func(*run.CommandStubber) - askStubs func(*prompt.AskStubber) - cfgStubs func(*config.ConfigMock) - remotes []*context.Remote - wantOut string - wantErrOut string - wantErr bool - errMsg string + name string + opts *ForkOptions + tty bool + httpStubs func(*httpmock.Registry) + execStubs func(*run.CommandStubber) + promptStubs func(*prompter.MockPrompter) + cfgStubs func(*config.ConfigMock) + remotes []*context.Remote + wantOut string + wantErrOut string + wantErr bool + errMsg string }{ { name: "implicit match, configured protocol overrides provided", @@ -272,9 +272,10 @@ func TestRepoFork(t *testing.T) { RemoteName: defaultRemoteName, }, httpStubs: forkPost, - askStubs: func(as *prompt.AskStubber) { - //nolint:staticcheck // SA1019: as.StubOne is deprecated: use StubPrompt - as.StubOne(false) + promptStubs: func(pm *prompter.MockPrompter) { + pm.RegisterConfirm("Would you like to add a remote for the fork?", func(_ string, _ bool) (bool, error) { + return false, nil + }) }, wantErrOut: "āœ“ Created fork someone/REPO\n", }, @@ -291,9 +292,10 @@ func TestRepoFork(t *testing.T) { cs.Register("git remote rename origin upstream", 0, "") cs.Register(`git remote add origin https://github.com/someone/REPO.git`, 0, "") }, - askStubs: func(as *prompt.AskStubber) { - //nolint:staticcheck // SA1019: as.StubOne is deprecated: use StubPrompt - as.StubOne(true) + promptStubs: func(pm *prompter.MockPrompter) { + pm.RegisterConfirm("Would you like to add a remote for the fork?", func(_ string, _ bool) (bool, error) { + return true, nil + }) }, wantErrOut: "āœ“ Created fork someone/REPO\nāœ“ Added remote origin\n", }, @@ -497,9 +499,10 @@ func TestRepoFork(t *testing.T) { PromptClone: true, }, httpStubs: forkPost, - askStubs: func(as *prompt.AskStubber) { - //nolint:staticcheck // SA1019: as.StubOne is deprecated: use StubPrompt - as.StubOne(false) + promptStubs: func(pm *prompter.MockPrompter) { + pm.RegisterConfirm("Would you like to clone the fork?", func(_ string, _ bool) (bool, error) { + return false, nil + }) }, wantErrOut: "āœ“ Created fork someone/REPO\n", }, @@ -511,9 +514,10 @@ func TestRepoFork(t *testing.T) { PromptClone: true, }, httpStubs: forkPost, - askStubs: func(as *prompt.AskStubber) { - //nolint:staticcheck // SA1019: as.StubOne is deprecated: use StubPrompt - as.StubOne(true) + promptStubs: func(pm *prompter.MockPrompter) { + pm.RegisterConfirm("Would you like to clone the fork?", func(_ string, _ bool) (bool, error) { + return true, nil + }) }, execStubs: func(cs *run.CommandStubber) { cs.Register(`git clone https://github.com/someone/REPO\.git`, 0, "") @@ -533,9 +537,10 @@ func TestRepoFork(t *testing.T) { }, }, httpStubs: forkPost, - askStubs: func(as *prompt.AskStubber) { - //nolint:staticcheck // SA1019: as.StubOne is deprecated: use StubPrompt - as.StubOne(true) + promptStubs: func(pm *prompter.MockPrompter) { + pm.RegisterConfirm("Would you like to clone the fork?", func(_ string, _ bool) (bool, error) { + return true, nil + }) }, execStubs: func(cs *run.CommandStubber) { cs.Register(`git clone https://github.com/someone/REPO\.git`, 0, "") @@ -746,11 +751,10 @@ func TestRepoFork(t *testing.T) { GitPath: "some/path/git", } - //nolint:staticcheck // SA1019: prompt.InitAskStubber is deprecated: use NewAskStubber - as, teardown := prompt.InitAskStubber() - defer teardown() - if tt.askStubs != nil { - tt.askStubs(as) + pm := prompter.NewMockPrompter(t) + tt.opts.Prompter = pm + if tt.promptStubs != nil { + tt.promptStubs(pm) } cs, restoreRun := run.Stub()