use Prompter in pr merge
This commit is contained in:
parent
42c017b887
commit
afcfd78852
2 changed files with 169 additions and 104 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue