From afcfd78852afc01004e719b7ca8b3e984225ffe0 Mon Sep 17 00:00:00 2001 From: vilmibm Date: Wed, 19 Oct 2022 13:02:32 -0700 Subject: [PATCH] use Prompter in pr merge --- pkg/cmd/pr/merge/merge.go | 47 ++----- pkg/cmd/pr/merge/merge_test.go | 226 +++++++++++++++++++++++---------- 2 files changed, 169 insertions(+), 104 deletions(-) diff --git a/pkg/cmd/pr/merge/merge.go b/pkg/cmd/pr/merge/merge.go index dbf0923f7..1a331597c 100644 --- a/pkg/cmd/pr/merge/merge.go +++ b/pkg/cmd/pr/merge/merge.go @@ -6,7 +6,6 @@ import ( "fmt" "net/http" - "github.com/AlecAivazis/survey/v2" "github.com/MakeNowJust/heredoc" "github.com/cli/cli/v2/api" ghContext "github.com/cli/cli/v2/context" @@ -16,7 +15,6 @@ import ( "github.com/cli/cli/v2/pkg/cmd/pr/shared" "github.com/cli/cli/v2/pkg/cmdutil" "github.com/cli/cli/v2/pkg/iostreams" - "github.com/cli/cli/v2/pkg/prompt" "github.com/cli/cli/v2/pkg/surveyext" "github.com/spf13/cobra" ) @@ -31,6 +29,7 @@ type MergeOptions struct { IO *iostreams.IOStreams Branch func() (string, error) Remotes func() (ghContext.Remotes, error) + Prompter shared.Prompt Finder shared.PRFinder @@ -65,6 +64,7 @@ func NewCmdMerge(f *cmdutil.Factory, runF func(*MergeOptions) error) *cobra.Comm GitClient: f.GitClient, Branch: f.Branch, Remotes: f.Remotes, + Prompter: f.Prompter, } var ( @@ -309,7 +309,7 @@ func (m *mergeContext) merge() error { return err } - payload.method, err = mergeMethodSurvey(r) + payload.method, err = mergeMethodSurvey(m.opts.Prompter, r) if err != nil { return err } @@ -321,7 +321,7 @@ func (m *mergeContext) merge() error { allowEditMsg := payload.method != PullRequestMergeMethodRebase for { - action, err := confirmSurvey(allowEditMsg) + action, err := confirmSurvey(m.opts.Prompter, allowEditMsg) if err != nil { return fmt.Errorf("unable to confirm: %w", err) } @@ -375,16 +375,12 @@ func (m *mergeContext) deleteLocalBranch() error { } if m.merged { - // prompt for delete if m.opts.IO.CanPrompt() && !m.opts.IsDeleteBranchIndicated { - //nolint:staticcheck // SA1019: prompt.SurveyAskOne is deprecated: use Prompter - err := prompt.SurveyAskOne(&survey.Confirm{ - Message: fmt.Sprintf("Pull request #%d was already merged. Delete the branch locally?", m.pr.Number), - Default: false, - }, &m.deleteBranch) + confirmed, err := m.opts.Prompter.Confirm(fmt.Sprintf("Pull request #%d was already merged. Delete the branch locally?", m.pr.Number), false) if err != nil { return fmt.Errorf("could not prompt: %w", err) } + m.deleteBranch = confirmed } else { _ = m.warnf(fmt.Sprintf("%s Pull request #%d was already merged\n", m.cs.WarningIcon(), m.pr.Number)) } @@ -550,7 +546,7 @@ func mergeRun(opts *MergeOptions) error { return nil } -func mergeMethodSurvey(baseRepo *api.Repository) (PullRequestMergeMethod, error) { +func mergeMethodSurvey(p shared.Prompt, baseRepo *api.Repository) (PullRequestMergeMethod, error) { type mergeOption struct { title string method PullRequestMergeMethod @@ -575,14 +571,8 @@ func mergeMethodSurvey(baseRepo *api.Repository) (PullRequestMergeMethod, error) surveyOpts = append(surveyOpts, v.title) } - mergeQuestion := &survey.Select{ - Message: "What merge method would you like to use?", - Options: surveyOpts, - } + result, err := p.Select("What merge method would you like to use?", "", surveyOpts) - var result int - //nolint:staticcheck // SA1019: prompt.SurveyAskOne is deprecated: use Prompter - err := prompt.SurveyAskOne(mergeQuestion, &result) return mergeOpts[result].method, err } @@ -595,20 +585,13 @@ func deleteBranchSurvey(opts *MergeOptions, crossRepoPR, localBranchExists bool) message = "Delete the branch on GitHub?" } - var result bool - submit := &survey.Confirm{ - Message: message, - Default: false, - } - //nolint:staticcheck // SA1019: prompt.SurveyAskOne is deprecated: use Prompter - err := prompt.SurveyAskOne(submit, &result) - return result, err + return opts.Prompter.Confirm(message, false) } return opts.DeleteBranch, nil } -func confirmSurvey(allowEditMsg bool) (shared.Action, error) { +func confirmSurvey(p shared.Prompt, allowEditMsg bool) (shared.Action, error) { const ( submitLabel = "Submit" editCommitSubjectLabel = "Edit commit subject" @@ -622,18 +605,12 @@ func confirmSurvey(allowEditMsg bool) (shared.Action, error) { } options = append(options, cancelLabel) - var result string - submit := &survey.Select{ - Message: "What's next?", - Options: options, - } - //nolint:staticcheck // SA1019: prompt.SurveyAskOne is deprecated: use Prompter - err := prompt.SurveyAskOne(submit, &result) + selected, err := p.Select("What's next?", "", options) if err != nil { return shared.CancelAction, fmt.Errorf("could not prompt: %w", err) } - switch result { + switch options[selected] { case submitLabel: return shared.SubmitAction, nil case editCommitSubjectLabel: diff --git a/pkg/cmd/pr/merge/merge_test.go b/pkg/cmd/pr/merge/merge_test.go index 0e3ced350..040032fef 100644 --- a/pkg/cmd/pr/merge/merge_test.go +++ b/pkg/cmd/pr/merge/merge_test.go @@ -17,12 +17,12 @@ import ( "github.com/cli/cli/v2/context" "github.com/cli/cli/v2/git" "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/cmd/pr/shared" "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/cli/cli/v2/test" "github.com/google/shlex" "github.com/stretchr/testify/assert" @@ -246,7 +246,8 @@ func stubCommit(pr *api.PullRequest, oid string) { }) } -func runCommand(rt http.RoundTripper, branch string, isTTY bool, cli string) (*test.CmdOut, error) { +// TODO port to new style tests +func runCommand(rt http.RoundTripper, pm *prompter.PrompterMock, branch string, isTTY bool, cli string) (*test.CmdOut, error) { ios, _, stdout, stderr := iostreams.Test() ios.SetStdoutTTY(isTTY) ios.SetStdinTTY(isTTY) @@ -271,6 +272,7 @@ func runCommand(rt http.RoundTripper, branch string, isTTY bool, cli string) (*t }, nil }, GitClient: &git.Client{GitPath: "some/path/git"}, + Prompter: pm, } cmd := NewCmdMerge(factory, nil) @@ -327,7 +329,7 @@ func TestPrMerge(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 1 --merge") + output, err := runCommand(http, nil, "main", true, "pr merge 1 --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -359,7 +361,7 @@ func TestPrMerge_blocked(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 1 --merge") + output, err := runCommand(http, nil, "main", true, "pr merge 1 --merge") assert.EqualError(t, err, "SilentError") assert.Equal(t, "", output.String()) @@ -392,7 +394,7 @@ func TestPrMerge_dirty(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 1 --merge") + output, err := runCommand(http, nil, "main", true, "pr merge 1 --merge") assert.EqualError(t, err, "SilentError") assert.Equal(t, "", output.String()) @@ -433,7 +435,7 @@ func TestPrMerge_nontty(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", false, "pr merge 1 --merge") + output, err := runCommand(http, nil, "main", false, "pr merge 1 --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -472,7 +474,7 @@ func TestPrMerge_editMessage_nontty(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", false, "pr merge 1 --merge -t mytitle -b mybody") + output, err := runCommand(http, nil, "main", false, "pr merge 1 --merge -t mytitle -b mybody") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -508,7 +510,7 @@ func TestPrMerge_withRepoFlag(t *testing.T) { _, cmdTeardown := run.Stub() defer cmdTeardown(t) - output, err := runCommand(http, "main", true, "pr merge 1 --merge -R OWNER/REPO") + output, err := runCommand(http, nil, "main", true, "pr merge 1 --merge -R OWNER/REPO") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -549,7 +551,7 @@ func TestPrMerge_withMatchCommitHeadFlag(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 1 --merge --match-head-commit 285ed5ab740f53ff6b0b4b629c59a9df23b9c6db") + output, err := runCommand(http, nil, "main", true, "pr merge 1 --merge --match-head-commit 285ed5ab740f53ff6b0b4b629c59a9df23b9c6db") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -591,7 +593,7 @@ func TestPrMerge_withAuthorFlag(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 1 --merge --author-email octocat@github.com") + output, err := runCommand(http, nil, "main", true, "pr merge 1 --merge --author-email octocat@github.com") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -641,7 +643,7 @@ func TestPrMerge_deleteBranch(t *testing.T) { cs.Register(`git branch -D blueberries`, 0, "") cs.Register(`git pull --ff-only`, 0, "") - output, err := runCommand(http, "blueberries", true, `pr merge --merge --delete-branch`) + output, err := runCommand(http, nil, "blueberries", true, `pr merge --merge --delete-branch`) if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -691,7 +693,7 @@ func TestPrMerge_deleteBranch_nonDefault(t *testing.T) { cs.Register(`git branch -D blueberries`, 0, "") cs.Register(`git pull --ff-only`, 0, "") - output, err := runCommand(http, "blueberries", true, `pr merge --merge --delete-branch`) + output, err := runCommand(http, nil, "blueberries", true, `pr merge --merge --delete-branch`) if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -741,7 +743,7 @@ func TestPrMerge_deleteBranch_checkoutNewBranch(t *testing.T) { cs.Register(`git branch -D blueberries`, 0, "") cs.Register(`git pull --ff-only`, 0, "") - output, err := runCommand(http, "blueberries", true, `pr merge --merge --delete-branch`) + output, err := runCommand(http, nil, "blueberries", true, `pr merge --merge --delete-branch`) if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -787,7 +789,7 @@ func TestPrMerge_deleteNonCurrentBranch(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/blueberries`, 0, "") cs.Register(`git branch -D blueberries`, 0, "") - output, err := runCommand(http, "main", true, `pr merge --merge --delete-branch blueberries`) + output, err := runCommand(http, nil, "main", true, `pr merge --merge --delete-branch blueberries`) if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -829,7 +831,7 @@ func Test_nonDivergingPullRequest(t *testing.T) { cs.Register(`git .+ show .+ HEAD`, 0, "COMMITSHA1,title") cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge --merge") + output, err := runCommand(http, nil, "blueberries", true, "pr merge --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -869,7 +871,7 @@ func Test_divergingPullRequestWarning(t *testing.T) { cs.Register(`git .+ show .+ HEAD`, 0, "COMMITSHA2,title") cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge --merge") + output, err := runCommand(http, nil, "blueberries", true, "pr merge --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -909,7 +911,7 @@ func Test_pullRequestWithoutCommits(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge --merge") + output, err := runCommand(http, nil, "blueberries", true, "pr merge --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -948,7 +950,7 @@ func TestPrMerge_rebase(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 2 --rebase") + output, err := runCommand(http, nil, "main", true, "pr merge 2 --rebase") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -989,7 +991,7 @@ func TestPrMerge_squash(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "main", true, "pr merge 3 --squash") + output, err := runCommand(http, nil, "main", true, "pr merge 3 --squash") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -1026,11 +1028,17 @@ func TestPrMerge_alreadyMerged(t *testing.T) { cs.Register(`git branch -D blueberries`, 0, "") cs.Register(`git pull --ff-only`, 0, "") - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("Pull request #4 was already merged. Delete the branch locally?").AnswerWith(true) + pm := &prompter.PrompterMock{ + ConfirmFunc: func(p string, d bool) (bool, error) { + if p == "Pull request #4 was already merged. Delete the branch locally?" { + return true, nil + } else { + return false, prompter.NoSuchPromptErr(p) + } + }, + } - output, err := runCommand(http, "blueberries", true, "pr merge 4") + output, err := runCommand(http, pm, "blueberries", true, "pr merge 4") assert.NoError(t, err) assert.Equal(t, "", output.String()) assert.Equal(t, "✓ Deleted branch blueberries and switched to branch main\n", output.Stderr()) @@ -1057,7 +1065,7 @@ func TestPrMerge_alreadyMerged_withMergeStrategy(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", false, "pr merge 4 --merge") + output, err := runCommand(http, nil, "blueberries", false, "pr merge 4 --merge") if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -1088,11 +1096,17 @@ func TestPrMerge_alreadyMerged_withMergeStrategy_TTY(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") cs.Register(`git branch -D `, 0, "") - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("Pull request #4 was already merged. Delete the branch locally?").AnswerWith(true) + pm := &prompter.PrompterMock{ + ConfirmFunc: func(p string, d bool) (bool, error) { + if p == "Pull request #4 was already merged. Delete the branch locally?" { + return true, nil + } else { + return false, prompter.NoSuchPromptErr(p) + } + }, + } - output, err := runCommand(http, "blueberries", true, "pr merge 4 --merge") + output, err := runCommand(http, pm, "blueberries", true, "pr merge 4 --merge") if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -1122,7 +1136,7 @@ func TestPrMerge_alreadyMerged_withMergeStrategy_crossRepo(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge 4 --merge") + output, err := runCommand(http, nil, "blueberries", true, "pr merge 4 --merge") if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -1168,13 +1182,27 @@ func TestPRMergeTTY(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/blueberries`, 0, "") - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("What merge method would you like to use?").AnswerDefault() - as.StubPrompt("Delete the branch locally and on GitHub?").AnswerDefault() - as.StubPrompt("What's next?").AnswerWith("Submit") + pm := &prompter.PrompterMock{ + ConfirmFunc: func(p string, d bool) (bool, error) { + if p == "Delete the branch locally and on GitHub?" { + return d, nil + } else { + return false, prompter.NoSuchPromptErr(p) + } + }, + SelectFunc: func(p, d string, opts []string) (int, error) { + switch p { + case "What's next?": + return prompter.IndexFor(opts, "Submit") + case "What merge method would you like to use?": + return 0, nil + default: + return -1, prompter.NoSuchPromptErr(p) + } + }, + } - output, err := runCommand(http, "blueberries", true, "") + output, err := runCommand(http, pm, "blueberries", true, "") if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -1230,12 +1258,20 @@ func TestPRMergeTTY_withDeleteBranch(t *testing.T) { cs.Register(`git branch -D blueberries`, 0, "") cs.Register(`git pull --ff-only`, 0, "") - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("What merge method would you like to use?").AnswerDefault() - as.StubPrompt("What's next?").AnswerWith("Submit") + pm := &prompter.PrompterMock{ + SelectFunc: func(p, d string, opts []string) (int, error) { + switch p { + case "What's next?": + return prompter.IndexFor(opts, "Submit") + case "What merge method would you like to use?": + return 0, nil + default: + return -1, prompter.NoSuchPromptErr(p) + } + }, + } - output, err := runCommand(http, "blueberries", true, "-d") + output, err := runCommand(http, pm, "blueberries", true, "-d") if err != nil { t.Fatalf("Got unexpected error running `pr merge` %s", err) } @@ -1290,13 +1326,29 @@ func TestPRMergeTTY_squashEditCommitMsgAndSubject(t *testing.T) { _, cmdTeardown := run.Stub() defer cmdTeardown(t) - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("What merge method would you like to use?").AnswerWith("Squash and merge") - as.StubPrompt("Delete the branch on GitHub?").AnswerDefault() - as.StubPrompt("What's next?").AnswerWith("Edit commit message") - as.StubPrompt("What's next?").AnswerWith("Edit commit subject") - as.StubPrompt("What's next?").AnswerWith("Submit") + selectCount := -1 + answers := []string{"Edit commit message", "Edit commit subject", "Submit"} + + pm := &prompter.PrompterMock{ + ConfirmFunc: func(p string, d bool) (bool, error) { + if p == "Delete the branch on GitHub?" { + return d, nil + } else { + return false, prompter.NoSuchPromptErr(p) + } + }, + SelectFunc: func(p, d string, opts []string) (int, error) { + switch p { + case "What's next?": + selectCount++ + return prompter.IndexFor(opts, answers[selectCount]) + case "What merge method would you like to use?": + return prompter.IndexFor(opts, "Squash and merge") + default: + return -1, prompter.NoSuchPromptErr(p) + } + }, + } err := mergeRun(&MergeOptions{ IO: ios, @@ -1304,6 +1356,7 @@ func TestPRMergeTTY_squashEditCommitMsgAndSubject(t *testing.T) { HttpClient: func() (*http.Client, error) { return &http.Client{Transport: tr}, nil }, + Prompter: pm, SelectorArg: "https://github.com/OWNER/REPO/pull/123", MergeStrategyEmpty: true, Finder: shared.NewMockFinder( @@ -1339,7 +1392,7 @@ func TestPRMergeEmptyStrategyNonTTY(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", false, "pr merge 1") + output, err := runCommand(http, nil, "blueberries", false, "pr merge 1") assert.EqualError(t, err, "--merge, --rebase, or --squash required when not running interactively") assert.Equal(t, "", output.String()) assert.Equal(t, "", output.Stderr()) @@ -1369,13 +1422,27 @@ func TestPRTTY_cancelled(t *testing.T) { cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("What merge method would you like to use?").AnswerDefault() - as.StubPrompt("Delete the branch locally and on GitHub?").AnswerDefault() - as.StubPrompt("What's next?").AnswerWith("Cancel") + pm := &prompter.PrompterMock{ + ConfirmFunc: func(p string, d bool) (bool, error) { + if p == "Delete the branch locally and on GitHub?" { + return d, nil + } else { + return false, prompter.NoSuchPromptErr(p) + } + }, + SelectFunc: func(p, d string, opts []string) (int, error) { + switch p { + case "What's next?": + return prompter.IndexFor(opts, "Cancel") + case "What merge method would you like to use?": + return 0, nil + default: + return -1, prompter.NoSuchPromptErr(p) + } + }, + } - output, err := runCommand(http, "blueberries", true, "") + output, err := runCommand(http, pm, "blueberries", true, "") if !errors.Is(err, cmdutil.CancelError) { t.Fatalf("got error %v", err) } @@ -1389,11 +1456,18 @@ func Test_mergeMethodSurvey(t *testing.T) { RebaseMergeAllowed: true, SquashMergeAllowed: true, } - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("What merge method would you like to use?").AnswerWith("Rebase and merge") - method, err := mergeMethodSurvey(repo) + pm := &prompter.PrompterMock{ + SelectFunc: func(p, d string, opts []string) (int, error) { + if p == "What merge method would you like to use?" { + return prompter.IndexFor(opts, "Rebase and merge") + } else { + return -1, prompter.NoSuchPromptErr(p) + } + }, + } + + method, err := mergeMethodSurvey(pm, repo) assert.Nil(t, err) assert.Equal(t, PullRequestMergeMethodRebase, method) } @@ -1530,7 +1604,7 @@ func TestPrInMergeQueue(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge 1") + output, err := runCommand(http, nil, "blueberries", true, "pr merge 1") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -1569,7 +1643,7 @@ func TestPrAddToMergeQueueWithMergeMethod(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge 1 --merge") + output, err := runCommand(http, nil, "blueberries", true, "pr merge 1 --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -1608,7 +1682,7 @@ func TestPrAddToMergeQueueClean(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge 1") + output, err := runCommand(http, nil, "blueberries", true, "pr merge 1") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -1648,7 +1722,7 @@ func TestPrAddToMergeQueueBlocked(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge 1") + output, err := runCommand(http, nil, "blueberries", true, "pr merge 1") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -1697,13 +1771,27 @@ func TestPrAddToMergeQueueAdmin(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - //nolint:staticcheck // SA1019: prompt.NewAskStubber is deprecated: use PrompterMock - as := prompt.NewAskStubber(t) - as.StubPrompt("What merge method would you like to use?").AnswerDefault() - as.StubPrompt("Delete the branch locally and on GitHub?").AnswerDefault() - as.StubPrompt("What's next?").AnswerDefault() + pm := &prompter.PrompterMock{ + ConfirmFunc: func(p string, d bool) (bool, error) { + if p == "Delete the branch locally and on GitHub?" { + return d, nil + } else { + return false, prompter.NoSuchPromptErr(p) + } + }, + SelectFunc: func(p, d string, opts []string) (int, error) { + switch p { + case "What's next?": + return 0, nil + case "What merge method would you like to use?": + return 0, nil + default: + return -1, prompter.NoSuchPromptErr(p) + } + }, + } - output, err := runCommand(http, "blueberries", true, "pr merge 1 --admin") + output, err := runCommand(http, pm, "blueberries", true, "pr merge 1 --admin") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) } @@ -1742,7 +1830,7 @@ func TestPrAddToMergeQueueAdminWithMergeStrategy(t *testing.T) { defer cmdTeardown(t) cs.Register(`git rev-parse --verify refs/heads/`, 0, "") - output, err := runCommand(http, "blueberries", true, "pr merge 1 --admin --merge") + output, err := runCommand(http, nil, "blueberries", true, "pr merge 1 --admin --merge") if err != nil { t.Fatalf("error running command `pr merge`: %v", err) }