Add test for mutually exclusive flags

Co-Authored-By: Nate Smith <vilmibm@neongrid.space>
This commit is contained in:
Corey Johnson 2020-05-12 09:30:19 -07:00
parent f0cd830170
commit 214be16d42
2 changed files with 42 additions and 1 deletions

View file

@ -1,6 +1,7 @@
package command
import (
"errors"
"fmt"
"io"
"os"
@ -479,7 +480,24 @@ func prMerge(cmd *cobra.Command, args []string) error {
return nil
}
isInteractive := !cmd.Flags().Changed("rebase") && !cmd.Flags().Changed("squash") && !cmd.Flags().Changed("merge")
// Ensure only one merge method is specified
found := 0
isInteractive := false
if cmd.Flags().Changed("merge") {
found++
}
if cmd.Flags().Changed("rebase") {
found++
}
if cmd.Flags().Changed("squash") {
found++
}
if found == 0 {
isInteractive = true
} else if found > 1 {
return errors.New("expected exactly one of --merge, --rebase, or --squash")
}
if isInteractive {
mergeMethod, deleteBranch, err = prInteractiveMerge()
if err != nil {

View file

@ -996,6 +996,15 @@ func TestPrMerge(t *testing.T) {
stubResponse{200, bytes.NewBufferString(`{"id": "THE-ID"}`)},
)
cs, cmdTeardown := test.InitCmdStubber()
defer cmdTeardown()
cs.Stub("branch.blueberries.remote origin\nbranch.blueberries.merge refs/heads/blueberries") // git config --get-regexp ^branch\.master\.(remote|merge)
cs.Stub("") // git config --get-regexp ^branch\.blueberries\.(remote|merge)$
cs.Stub("") // git symbolic-ref --quiet --short HEAD
cs.Stub("") // git checkout master
cs.Stub("")
output, err := RunCommand("pr merge 1 --merge")
if err != nil {
t.Fatalf("error running command `pr merge`: %v", err)
@ -1159,3 +1168,17 @@ func TestPRMerge_interactive(t *testing.T) {
test.ExpectLines(t, output.String(), "Merged pull request #3", "Deleted local branch")
}
func TestPrMerge_multipleMergeMethods(t *testing.T) {
initWithStubs("master",
stubResponse{200, bytes.NewBufferString(`{ "data": { "repository": {
"pullRequest": { "number": 1, "closed": false, "state": "OPEN"}
} } }`)},
stubResponse{200, bytes.NewBufferString(`{"id": "THE-ID"}`)},
)
_, err := RunCommand("pr merge 1 --merge --squash")
if err == nil {
t.Fatal("expected error running `pr merge` with multiple merge methods")
}
}