mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-14 11:23:09 +02:00
63dc07fded
By constructing an arg vector manually, we no longer need to quote arguments Mandate that args must be passed when building a command Now you need to provide an args array when building a command. There are a handful of places where we need to deal with a string, such as with user-defined custom commands, and for those we now require that at the callsite they use str.ToArgv to do that. I don't want to provide a method out of the box for it because I want to discourage its use. For some reason we were invoking a command through a shell when amending a commit, and I don't believe we needed to do that as there was nothing user- supplied about the command. So I've switched to using a regular command out- side the shell there
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package git_commands
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/go-errors/errors"
|
|
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestPatchApplyPatch(t *testing.T) {
|
|
type scenario struct {
|
|
testName string
|
|
opts ApplyPatchOpts
|
|
runner *oscommands.FakeCmdObjRunner
|
|
test func(error)
|
|
}
|
|
|
|
// expectedArgs excludes the last argument which is an indeterminate filename
|
|
expectFn := func(expectedArgs []string, errToReturn error) func(cmdObj oscommands.ICmdObj) (string, error) {
|
|
return func(cmdObj oscommands.ICmdObj) (string, error) {
|
|
args := cmdObj.Args()
|
|
|
|
assert.Equal(t, len(args), len(expectedArgs)+1, fmt.Sprintf("unexpected command: %s", cmdObj.ToString()))
|
|
|
|
filename := args[len(args)-1]
|
|
|
|
content, err := os.ReadFile(filename)
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, "test", string(content))
|
|
|
|
return "", errToReturn
|
|
}
|
|
}
|
|
|
|
scenarios := []scenario{
|
|
{
|
|
testName: "valid case",
|
|
opts: ApplyPatchOpts{Cached: true},
|
|
runner: oscommands.NewFakeRunner(t).
|
|
ExpectFunc(expectFn([]string{"git", "apply", "--cached"}, nil)),
|
|
test: func(err error) {
|
|
assert.NoError(t, err)
|
|
},
|
|
},
|
|
{
|
|
testName: "command returns error",
|
|
opts: ApplyPatchOpts{Cached: true},
|
|
runner: oscommands.NewFakeRunner(t).
|
|
ExpectFunc(expectFn([]string{"git", "apply", "--cached"}, errors.New("error"))),
|
|
test: func(err error) {
|
|
assert.Error(t, err)
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarios {
|
|
s := s
|
|
t.Run(s.testName, func(t *testing.T) {
|
|
instance := buildPatchCommands(commonDeps{runner: s.runner})
|
|
s.test(instance.ApplyPatch("test", s.opts))
|
|
s.runner.CheckForMissingCalls()
|
|
})
|
|
}
|
|
}
|