mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-12 11:15:00 +02:00
224 lines
5.3 KiB
Go
224 lines
5.3 KiB
Go
package commands
|
|
|
|
import (
|
|
"os/exec"
|
|
"testing"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/secureexec"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestGitCommandPush is a function.
|
|
func TestGitCommandPush(t *testing.T) {
|
|
type scenario struct {
|
|
testName string
|
|
getGitConfigValue func(string) (string, error)
|
|
command func(string, ...string) *exec.Cmd
|
|
forcePush bool
|
|
test func(error)
|
|
}
|
|
|
|
scenarios := []scenario{
|
|
{
|
|
"Push with force disabled, follow-tags on",
|
|
func(string) (string, error) {
|
|
return "", nil
|
|
},
|
|
func(cmd string, args ...string) *exec.Cmd {
|
|
assert.EqualValues(t, "git", cmd)
|
|
assert.EqualValues(t, []string{"push", "--follow-tags"}, args)
|
|
|
|
return secureexec.Command("echo")
|
|
},
|
|
false,
|
|
func(err error) {
|
|
assert.NoError(t, err)
|
|
},
|
|
},
|
|
{
|
|
"Push with force enabled, follow-tags on",
|
|
func(string) (string, error) {
|
|
return "", nil
|
|
},
|
|
func(cmd string, args ...string) *exec.Cmd {
|
|
assert.EqualValues(t, "git", cmd)
|
|
assert.EqualValues(t, []string{"push", "--follow-tags", "--force-with-lease"}, args)
|
|
|
|
return secureexec.Command("echo")
|
|
},
|
|
true,
|
|
func(err error) {
|
|
assert.NoError(t, err)
|
|
},
|
|
},
|
|
{
|
|
"Push with force disabled, follow-tags off",
|
|
func(string) (string, error) {
|
|
return "false", nil
|
|
},
|
|
func(cmd string, args ...string) *exec.Cmd {
|
|
assert.EqualValues(t, "git", cmd)
|
|
assert.EqualValues(t, []string{"push"}, args)
|
|
|
|
return secureexec.Command("echo")
|
|
},
|
|
false,
|
|
func(err error) {
|
|
assert.NoError(t, err)
|
|
},
|
|
},
|
|
{
|
|
"Push with an error occurring, follow-tags on",
|
|
func(string) (string, error) {
|
|
return "", nil
|
|
},
|
|
func(cmd string, args ...string) *exec.Cmd {
|
|
assert.EqualValues(t, "git", cmd)
|
|
assert.EqualValues(t, []string{"push", "--follow-tags"}, args)
|
|
return secureexec.Command("test")
|
|
},
|
|
false,
|
|
func(err error) {
|
|
assert.Error(t, err)
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarios {
|
|
t.Run(s.testName, func(t *testing.T) {
|
|
gitCmd := NewDummyGitCommand()
|
|
gitCmd.OSCommand.Command = s.command
|
|
gitCmd.getGitConfigValue = s.getGitConfigValue
|
|
err := gitCmd.Push("test", s.forcePush, "", "", func(passOrUname string) string {
|
|
return "\n"
|
|
})
|
|
s.test(err)
|
|
})
|
|
}
|
|
}
|
|
|
|
type getPullModeScenario struct {
|
|
testName string
|
|
getGitConfigValueMock func(string) (string, error)
|
|
configPullModeValue string
|
|
test func(string)
|
|
}
|
|
|
|
func TestGetPullMode(t *testing.T) {
|
|
|
|
scenarios := getPullModeScenarios(t)
|
|
|
|
for _, s := range scenarios {
|
|
t.Run(s.testName, func(t *testing.T) {
|
|
gitCmd := NewDummyGitCommand()
|
|
gitCmd.getGitConfigValue = s.getGitConfigValueMock
|
|
s.test(gitCmd.GetPullMode(s.configPullModeValue))
|
|
})
|
|
}
|
|
}
|
|
|
|
func getPullModeScenarios(t *testing.T) []getPullModeScenario {
|
|
return []getPullModeScenario{
|
|
{
|
|
testName: "Merge is default",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "auto",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "merge", actual)
|
|
},
|
|
}, {
|
|
testName: "Reads rebase when pull.rebase is true",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
if s == "pull.rebase" {
|
|
return "true", nil
|
|
}
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "auto",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "rebase", actual)
|
|
},
|
|
}, {
|
|
testName: "Reads ff-only when pull.ff is only",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
if s == "pull.ff" {
|
|
return "only", nil
|
|
}
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "auto",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "ff-only", actual)
|
|
},
|
|
}, {
|
|
testName: "Reads rebase when rebase is true and ff is only",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
if s == "pull.rebase" {
|
|
return "true", nil
|
|
}
|
|
if s == "pull.ff" {
|
|
return "only", nil
|
|
}
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "auto",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "rebase", actual)
|
|
},
|
|
}, {
|
|
testName: "Reads rebase when pull.rebase is true",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
if s == "pull.rebase" {
|
|
return "true", nil
|
|
}
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "auto",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "rebase", actual)
|
|
},
|
|
}, {
|
|
testName: "Reads ff-only when pull.ff is only",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
if s == "pull.ff" {
|
|
return "only", nil
|
|
}
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "auto",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "ff-only", actual)
|
|
},
|
|
}, {
|
|
testName: "Respects merge config",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "merge",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "merge", actual)
|
|
},
|
|
}, {
|
|
testName: "Respects rebase config",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "rebase",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "rebase", actual)
|
|
},
|
|
}, {
|
|
testName: "Respects ff-only config",
|
|
getGitConfigValueMock: func(s string) (string, error) {
|
|
return "", nil
|
|
},
|
|
configPullModeValue: "ff-only",
|
|
test: func(actual string) {
|
|
assert.Equal(t, "ff-only", actual)
|
|
},
|
|
},
|
|
}
|
|
}
|