Add tests for pr merge --auto/--disable-auto
This commit is contained in:
parent
ddddd95d73
commit
203397baf9
3 changed files with 90 additions and 6 deletions
|
|
@ -69,7 +69,7 @@ func mergePullRequest(client *http.Client, payload mergePayload) error {
|
|||
|
||||
if payload.auto {
|
||||
var mutation struct {
|
||||
AnablePullRequestAutoMerge struct {
|
||||
EnablePullRequestAutoMerge struct {
|
||||
ClientMutationId string
|
||||
} `graphql:"enablePullRequestAutoMerge(input: $input)"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ type MergeOptions struct {
|
|||
DeleteBranch bool
|
||||
MergeMethod PullRequestMergeMethod
|
||||
|
||||
AutoMerge bool
|
||||
AutoMergeEnable bool
|
||||
AutoMergeDisable bool
|
||||
|
||||
Body string
|
||||
|
|
@ -115,7 +115,7 @@ func NewCmdMerge(f *cmdutil.Factory, runF func(*MergeOptions) error) *cobra.Comm
|
|||
cmd.Flags().BoolVarP(&flagMerge, "merge", "m", false, "Merge the commits with the base branch")
|
||||
cmd.Flags().BoolVarP(&flagRebase, "rebase", "r", false, "Rebase the commits onto the base branch")
|
||||
cmd.Flags().BoolVarP(&flagSquash, "squash", "s", false, "Squash the commits into one commit and merge it into the base branch")
|
||||
cmd.Flags().BoolVar(&opts.AutoMerge, "auto", false, "Automatically merge only after necessary requirements are met")
|
||||
cmd.Flags().BoolVar(&opts.AutoMergeEnable, "auto", false, "Automatically merge only after necessary requirements are met")
|
||||
cmd.Flags().BoolVar(&opts.AutoMergeDisable, "disable-auto", false, "Disable auto-merge for this pull request")
|
||||
return cmd
|
||||
}
|
||||
|
|
@ -171,7 +171,7 @@ func mergeRun(opts *MergeOptions) error {
|
|||
repo: baseRepo,
|
||||
pullRequestID: pr.ID,
|
||||
method: opts.MergeMethod,
|
||||
auto: opts.AutoMerge,
|
||||
auto: opts.AutoMergeEnable,
|
||||
commitBody: opts.Body,
|
||||
setCommitBody: opts.BodySet,
|
||||
}
|
||||
|
|
@ -254,7 +254,7 @@ func mergeRun(opts *MergeOptions) error {
|
|||
fmt.Fprintf(opts.IO.ErrOut, "%s %s pull request #%d (%s)\n", cs.SuccessIconWithColor(cs.Magenta), action, pr.Number, pr.Title)
|
||||
}
|
||||
}
|
||||
} else if !opts.IsDeleteBranchIndicated && opts.InteractiveMode && !crossRepoPR && !opts.AutoMerge {
|
||||
} else if !opts.IsDeleteBranchIndicated && opts.InteractiveMode && !crossRepoPR && !opts.AutoMergeEnable {
|
||||
err := prompt.SurveyAskOne(&survey.Confirm{
|
||||
Message: fmt.Sprintf("Pull request #%d was already merged. Delete the branch locally?", pr.Number),
|
||||
Default: false,
|
||||
|
|
@ -266,7 +266,7 @@ func mergeRun(opts *MergeOptions) error {
|
|||
fmt.Fprintf(opts.IO.ErrOut, "%s Pull request #%d was already merged\n", cs.WarningIcon(), pr.Number)
|
||||
}
|
||||
|
||||
if !deleteBranch || crossRepoPR || opts.AutoMerge {
|
||||
if !deleteBranch || crossRepoPR || opts.AutoMergeEnable {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -801,3 +801,87 @@ func Test_mergeMethodSurvey(t *testing.T) {
|
|||
assert.Nil(t, err)
|
||||
assert.Equal(t, PullRequestMergeMethodRebase, method)
|
||||
}
|
||||
|
||||
func TestMergeRun_autoMerge(t *testing.T) {
|
||||
io, _, stdout, stderr := iostreams.Test()
|
||||
io.SetStdoutTTY(true)
|
||||
io.SetStderrTTY(true)
|
||||
|
||||
tr := initFakeHTTP()
|
||||
defer tr.Verify(t)
|
||||
|
||||
tr.Register(
|
||||
httpmock.GraphQL(`query PullRequestByNumber\b`),
|
||||
httpmock.StringResponse(`
|
||||
{ "data": { "repository": { "pullRequest": {
|
||||
"id": "THE-ID",
|
||||
"number": 123,
|
||||
"title": "The title of the PR",
|
||||
"state": "OPEN",
|
||||
"headRefName": "blueberries",
|
||||
"headRepositoryOwner": {"login": "OWNER"}
|
||||
} } } }`))
|
||||
tr.Register(
|
||||
httpmock.GraphQL(`mutation PullRequestAutoMerge\b`),
|
||||
httpmock.GraphQLMutation(`{}`, func(input map[string]interface{}) {
|
||||
assert.Equal(t, "THE-ID", input["pullRequestId"].(string))
|
||||
assert.Equal(t, "SQUASH", input["mergeMethod"].(string))
|
||||
}))
|
||||
|
||||
_, cmdTeardown := run.Stub()
|
||||
defer cmdTeardown(t)
|
||||
|
||||
err := mergeRun(&MergeOptions{
|
||||
IO: io,
|
||||
HttpClient: func() (*http.Client, error) {
|
||||
return &http.Client{Transport: tr}, nil
|
||||
},
|
||||
SelectorArg: "https://github.com/OWNER/REPO/pull/123",
|
||||
AutoMergeEnable: true,
|
||||
MergeMethod: PullRequestMergeMethodSquash,
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "", stdout.String())
|
||||
assert.Equal(t, "✓ Pull request #123 will be automatically merged via squash when all requirements are met\n", stderr.String())
|
||||
}
|
||||
|
||||
func TestMergeRun_disableAutoMerge(t *testing.T) {
|
||||
io, _, stdout, stderr := iostreams.Test()
|
||||
io.SetStdoutTTY(true)
|
||||
io.SetStderrTTY(true)
|
||||
|
||||
tr := initFakeHTTP()
|
||||
defer tr.Verify(t)
|
||||
|
||||
tr.Register(
|
||||
httpmock.GraphQL(`query PullRequestByNumber\b`),
|
||||
httpmock.StringResponse(`
|
||||
{ "data": { "repository": { "pullRequest": {
|
||||
"id": "THE-ID",
|
||||
"number": 123,
|
||||
"title": "The title of the PR",
|
||||
"state": "OPEN",
|
||||
"headRefName": "blueberries",
|
||||
"headRepositoryOwner": {"login": "OWNER"}
|
||||
} } } }`))
|
||||
tr.Register(
|
||||
httpmock.GraphQL(`mutation PullRequestAutoMergeDisable\b`),
|
||||
httpmock.StringResponse(`{}`))
|
||||
|
||||
_, cmdTeardown := run.Stub()
|
||||
defer cmdTeardown(t)
|
||||
|
||||
err := mergeRun(&MergeOptions{
|
||||
IO: io,
|
||||
HttpClient: func() (*http.Client, error) {
|
||||
return &http.Client{Transport: tr}, nil
|
||||
},
|
||||
SelectorArg: "https://github.com/OWNER/REPO/pull/123",
|
||||
AutoMergeDisable: true,
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "", stdout.String())
|
||||
assert.Equal(t, "✓ Auto-merge disabled for pull request #123\n", stderr.String())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue