use Prompter in pr merge

This commit is contained in:
vilmibm 2022-10-19 13:02:32 -07:00
parent 42c017b887
commit afcfd78852
2 changed files with 169 additions and 104 deletions

View file

@ -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:

View file

@ -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)
}