diff options
author | Kristijan Husak <husakkristijan@gmail.com> | 2018-10-12 14:06:03 +0200 |
---|---|---|
committer | Kristijan Husak <husakkristijan@gmail.com> | 2018-10-13 22:54:51 +0200 |
commit | df0e3e52fea02950d78af5233a859f592092d475 (patch) | |
tree | 7210a491186833ca2d0481b2602add1dfa0d5e15 /pkg/commands/pull_request_test.go | |
parent | d5f64602a8e10ab5c8162140d426ce677fe884ee (diff) |
Add option to create pull request form branches panel.
Diffstat (limited to 'pkg/commands/pull_request_test.go')
-rw-r--r-- | pkg/commands/pull_request_test.go | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/pkg/commands/pull_request_test.go b/pkg/commands/pull_request_test.go new file mode 100644 index 000000000..8173edc71 --- /dev/null +++ b/pkg/commands/pull_request_test.go @@ -0,0 +1,151 @@ +package commands + +import ( + "github.com/stretchr/testify/assert" + "os/exec" + "strings" + "testing" +) + +func TestGetRepoInfoFromURL(t *testing.T) { + type scenario struct { + testName string + repoURL string + test func(*RepoInformation) + } + + scenarios := []scenario{ + { + "Returns repository information for git remote url", + "git@github.com:petersmith/super_calculator", + func(repoInfo *RepoInformation) { + assert.EqualValues(t, repoInfo.Owner, "petersmith") + assert.EqualValues(t, repoInfo.Repository, "super_calculator") + }, + }, + { + "Returns repository information for http remote url", + "https://my_username@bitbucket.org/johndoe/social_network.git", + func(repoInfo *RepoInformation) { + assert.EqualValues(t, repoInfo.Owner, "johndoe") + assert.EqualValues(t, repoInfo.Repository, "social_network") + }, + }, + } + + for _, s := range scenarios { + t.Run(s.testName, func(t *testing.T) { + s.test(getRepoInfoFromURL(s.repoURL)) + }) + } +} + +func TestCreatePullRequest(t *testing.T) { + type scenario struct { + testName string + branch *Branch + command func(string, ...string) *exec.Cmd + test func(err error) + } + + scenarios := []scenario{ + { + "Opens a link to new pull request on bitbucket", + &Branch{ + Name: "feature/profile-page", + }, + func(cmd string, args ...string) *exec.Cmd { + // Handle git remote url call + if strings.HasPrefix(cmd, "git") { + return exec.Command("echo", "git@bitbucket.org:johndoe/social_network.git") + } + + assert.Equal(t, cmd, "open") + assert.Equal(t, args, []string{"https://bitbucket.org/johndoe/social_network/pull-requests/new?t=feature/profile-page"}) + return exec.Command("echo") + }, + func(err error) { + assert.NoError(t, err) + }, + }, + { + "Opens a link to new pull request on bitbucket with http remote url", + &Branch{ + Name: "feature/events", + }, + func(cmd string, args ...string) *exec.Cmd { + // Handle git remote url call + if strings.HasPrefix(cmd, "git") { + return exec.Command("echo", "https://my_username@bitbucket.org/johndoe/social_network.git") + } + + assert.Equal(t, cmd, "open") + assert.Equal(t, args, []string{"https://bitbucket.org/johndoe/social_network/pull-requests/new?t=feature/events"}) + return exec.Command("echo") + }, + func(err error) { + assert.NoError(t, err) + }, + }, + { + "Opens a link to new pull request on github", + &Branch{ + Name: "feature/sum-operation", + }, + func(cmd string, args ...string) *exec.Cmd { + // Handle git remote url call + if strings.HasPrefix(cmd, "git") { + return exec.Command("echo", "git@github.com:peter/calculator.git") + } + + assert.Equal(t, cmd, "open") + assert.Equal(t, args, []string{"https://github.com/peter/calculator/compare/feature/sum-operation?expand=1"}) + return exec.Command("echo") + }, + func(err error) { + assert.NoError(t, err) + }, + }, + { + "Opens a link to new pull request on gitlab", + &Branch{ + Name: "feature/ui", + }, + func(cmd string, args ...string) *exec.Cmd { + // Handle git remote url call + if strings.HasPrefix(cmd, "git") { + return exec.Command("echo", "git@gitlab.com:peter/calculator.git") + } + + assert.Equal(t, cmd, "open") + assert.Equal(t, args, []string{"https://gitlab.com/peter/calculator/merge_requests/new?merge_request[source_branch]=feature/ui"}) + return exec.Command("echo") + }, + func(err error) { + assert.NoError(t, err) + }, + }, + { + "Throws an error if git service is unsupported", + &Branch{ + Name: "feature/divide-operation", + }, + func(cmd string, args ...string) *exec.Cmd { + return exec.Command("echo", "git@something.com:peter/calculator.git") + }, + func(err error) { + assert.Error(t, err) + }, + }, + } + + for _, s := range scenarios { + t.Run(s.testName, func(t *testing.T) { + gitCommand := newDummyGitCommand() + gitCommand.OSCommand.command = s.command + gitCommand.OSCommand.Config.GetUserConfig().Set("os.openCommand", "open {{filename}}") + dummyPullRequest, _ := NewPullRequest(gitCommand) + s.test(dummyPullRequest.Create(s.branch)) + }) + } +} |