diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-16 10:18:38 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-16 11:24:47 +1100 |
commit | d967f653292ea17d21f2701b886b6afa5ba97c5e (patch) | |
tree | fe84537179ad7bec107309e46b94317077790f54 /pkg | |
parent | 306ac41fd847ef2d50c4262fcb439dbf6cd9b29b (diff) |
fix git tests
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/commands/exec_live_default.go | 6 | ||||
-rw-r--r-- | pkg/commands/git.go | 3 | ||||
-rw-r--r-- | pkg/commands/git_test.go | 115 |
3 files changed, 101 insertions, 23 deletions
diff --git a/pkg/commands/exec_live_default.go b/pkg/commands/exec_live_default.go index 2d0b78c21..34608bd16 100644 --- a/pkg/commands/exec_live_default.go +++ b/pkg/commands/exec_live_default.go @@ -5,12 +5,12 @@ package commands import ( "bufio" "bytes" - "github.com/go-errors/errors" "os" - "os/exec" "strings" "unicode/utf8" + "github.com/go-errors/errors" + "github.com/jesseduffield/pty" "github.com/mgutz/str" ) @@ -21,7 +21,7 @@ import ( // NOTE: If the return data is empty it won't written anything to stdin func RunCommandWithOutputLiveWrapper(c *OSCommand, command string, output func(string) string) error { splitCmd := str.ToArgv(command) - cmd := exec.Command(splitCmd[0], splitCmd[1:]...) + cmd := c.command(splitCmd[0], splitCmd[1:]...) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, "LANG=en_US.UTF-8", "LC_ALL=en_US.UTF-8") diff --git a/pkg/commands/git.go b/pkg/commands/git.go index 9182c4441..6bed64a27 100644 --- a/pkg/commands/git.go +++ b/pkg/commands/git.go @@ -390,7 +390,7 @@ func (c *GitCommand) Push(branchName string, force bool, ask func(string) string forceFlag = "--force-with-lease " } - cmd := fmt.Sprintf("git push %s -u origin %s", forceFlag, branchName) + cmd := fmt.Sprintf("git push %s-u origin %s", forceFlag, branchName) return c.OSCommand.DetectUnamePass(cmd, ask) } @@ -729,7 +729,6 @@ func (c *GitCommand) Show(sha string) (string, error) { if err != nil { return "", err } - return show + mergeDiff, nil } diff --git a/pkg/commands/git_test.go b/pkg/commands/git_test.go index 3dcb7798d..188844486 100644 --- a/pkg/commands/git_test.go +++ b/pkg/commands/git_test.go @@ -5,10 +5,12 @@ import ( "io/ioutil" "os" "os/exec" + "strings" "testing" "time" "github.com/jesseduffield/lazygit/pkg/i18n" + "github.com/mgutz/str" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" gogit "gopkg.in/src-d/go-git.v4" @@ -70,6 +72,39 @@ func newDummyGitCommand() *GitCommand { } } +// commandSwapper takes a command, verifies that it is what it's expected to be +// and then returns a replacement command that will actually be called by the os +type commandSwapper struct { + expect string + replace string +} + +// swapCommand verifies the command is what we expected, and swaps it out for a different command +func (i *commandSwapper) swapCommand(t *testing.T, cmd string, args []string) *exec.Cmd { + splitCmd := str.ToArgv(i.expect) + assert.EqualValues(t, splitCmd[0], cmd, fmt.Sprintf("received command: %s %s", cmd, strings.Join(args, " "))) + if len(splitCmd) > 1 { + assert.EqualValues(t, splitCmd[1:], args, fmt.Sprintf("received command: %s %s", cmd, strings.Join(args, " "))) + } + + splitCmd = str.ToArgv(i.replace) + return exec.Command(splitCmd[0], splitCmd[1:]...) +} + +func createMockCommand(t *testing.T, swappers []*commandSwapper) func(cmd string, args ...string) *exec.Cmd { + commandIndex := 0 + + return func(cmd string, args ...string) *exec.Cmd { + var command *exec.Cmd + if commandIndex > len(swappers)-1 { + assert.Fail(t, fmt.Sprintf("too many commands run. This command was (%s %s)", cmd, strings.Join(args, " "))) + } + command = swappers[commandIndex].swapCommand(t, cmd, args) + commandIndex++ + return command + } +} + // TestVerifyInGitRepo is a function. func TestVerifyInGitRepo(t *testing.T) { type scenario struct { @@ -615,8 +650,8 @@ func TestGitCommandGetCommitDifferences(t *testing.T) { } } -// TestGitCommandGetCommitsToPush is a function. -func TestGitCommandGetCommitsToPush(t *testing.T) { +// TestGitCommandGetUnpushedCommits is a function. +func TestGitCommandGetUnpushedCommits(t *testing.T) { type scenario struct { testName string command func(string, ...string) *exec.Cmd @@ -649,7 +684,7 @@ func TestGitCommandGetCommitsToPush(t *testing.T) { t.Run(s.testName, func(t *testing.T) { gitCmd := newDummyGitCommand() gitCmd.OSCommand.command = s.command - s.test(gitCmd.GetCommitsToPush()) + s.test(gitCmd.GetUnpushedCommits()) }) } } @@ -1010,7 +1045,7 @@ func TestGitCommandPush(t *testing.T) { }, false, func(err error) { - assert.Contains(t, err.Error(), "error: failed to push some refs") + assert.NoError(t, err) }, }, { @@ -1023,7 +1058,7 @@ func TestGitCommandPush(t *testing.T) { }, true, func(err error) { - assert.Contains(t, err.Error(), "error: failed to push some refs") + assert.NoError(t, err) }, }, { @@ -1035,7 +1070,7 @@ func TestGitCommandPush(t *testing.T) { }, false, func(err error) { - assert.Contains(t, err.Error(), "error: failed to push some refs") + assert.Error(t, err) }, }, } @@ -1528,16 +1563,62 @@ func TestGitCommandRemoveFile(t *testing.T) { // TestGitCommandShow is a function. func TestGitCommandShow(t *testing.T) { - gitCmd := newDummyGitCommand() - gitCmd.OSCommand.command = func(cmd string, args ...string) *exec.Cmd { - assert.EqualValues(t, "git", cmd) - assert.EqualValues(t, []string{"show", "--color", "456abcde"}, args) + type scenario struct { + testName string + arg string + command func(string, ...string) *exec.Cmd + test func(string, error) + } - return exec.Command("echo") + scenarios := []scenario{ + { + "regular commit", + "456abcde", + createMockCommand(t, []*commandSwapper{ + { + expect: "git show --color 456abcde", + replace: "echo \"commit ccc771d8b13d5b0d4635db4463556366470fd4f6\nblah\"", + }, + { + expect: "git rev-list -1 --merges 456abcde^...456abcde", + replace: "echo", + }, + }), + func(result string, err error) { + assert.NoError(t, err) + assert.Equal(t, "commit ccc771d8b13d5b0d4635db4463556366470fd4f6\nblah\n", result) + }, + }, + { + "merge commit", + "456abcde", + createMockCommand(t, []*commandSwapper{ + { + expect: "git show --color 456abcde", + replace: "echo \"commit ccc771d8b13d5b0d4635db4463556366470fd4f6\nMerge: 1a6a69a 3b51d7c\"", + }, + { + expect: "git rev-list -1 --merges 456abcde^...456abcde", + replace: "echo aa30e006433628ba9281652952b34d8aacda9c01", + }, + { + expect: "git diff --color 1a6a69a...3b51d7c", + replace: "echo blah", + }, + }), + func(result string, err error) { + assert.NoError(t, err) + assert.Equal(t, "commit ccc771d8b13d5b0d4635db4463556366470fd4f6\nMerge: 1a6a69a 3b51d7c\nblah\n", result) + }, + }, } - _, err := gitCmd.Show("456abcde") - assert.NoError(t, err) + gitCmd := newDummyGitCommand() + + for _, s := range scenarios { + gitCmd.OSCommand.command = s.command + s.test(gitCmd.Show(s.arg)) + } } // TestGitCommandCheckout is a function. @@ -1638,7 +1719,7 @@ func TestGitCommandGetCommits(t *testing.T) { }, }, { - "GetCommits returns 2 commits, 1 pushed the other not", + "GetCommits returns 2 commits, 1 unpushed, the other merged", func(cmd string, args ...string) *exec.Cmd { assert.EqualValues(t, "git", cmd) @@ -1666,15 +1747,13 @@ func TestGitCommandGetCommits(t *testing.T) { { Sha: "8a2bb0e", Name: "commit 1", - Pushed: true, - Merged: false, + Status: "unpushed", DisplayString: "8a2bb0e commit 1", }, { Sha: "78976bc", Name: "commit 2", - Pushed: false, - Merged: true, + Status: "merged", DisplayString: "78976bc commit 2", }, }, commits) |