mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-02 09:21:40 +02:00
7b302d8c29
Afero is a package that lets you mock out a filesystem with an in-memory filesystem. It allows us to easily create the files required for a given test without worrying about a cleanup step or different tests tripping on eachother when run in parallel. Later on I'll standardise on using afero over the vanilla os package
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package commands
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/go-errors/errors"
|
|
"github.com/spf13/afero"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFindWorktreeRoot(t *testing.T) {
|
|
type scenario struct {
|
|
testName string
|
|
currentPath string
|
|
before func(fs afero.Fs)
|
|
expectedPath string
|
|
expectedErr string
|
|
}
|
|
|
|
scenarios := []scenario{
|
|
{
|
|
testName: "at root of worktree",
|
|
currentPath: "/path/to/repo",
|
|
before: func(fs afero.Fs) {
|
|
_ = fs.MkdirAll("/path/to/repo/.git", 0o755)
|
|
},
|
|
expectedPath: "/path/to/repo",
|
|
expectedErr: "",
|
|
},
|
|
{
|
|
testName: "inside worktree",
|
|
currentPath: "/path/to/repo/subdir",
|
|
before: func(fs afero.Fs) {
|
|
_ = fs.MkdirAll("/path/to/repo/.git", 0o755)
|
|
_ = fs.MkdirAll("/path/to/repo/subdir", 0o755)
|
|
},
|
|
expectedPath: "/path/to/repo",
|
|
expectedErr: "",
|
|
},
|
|
{
|
|
testName: "not in a git repo",
|
|
currentPath: "/path/to/dir",
|
|
before: func(fs afero.Fs) {},
|
|
expectedPath: "",
|
|
expectedErr: "Must open lazygit in a git repository",
|
|
},
|
|
{
|
|
testName: "In linked worktree",
|
|
currentPath: "/path/to/worktree",
|
|
before: func(fs afero.Fs) {
|
|
_ = fs.MkdirAll("/path/to/worktree", 0o755)
|
|
_ = afero.WriteFile(fs, "/path/to/worktree/.git", []byte("blah"), 0o755)
|
|
},
|
|
expectedPath: "/path/to/worktree",
|
|
expectedErr: "",
|
|
},
|
|
}
|
|
|
|
for _, s := range scenarios {
|
|
s := s
|
|
t.Run(s.testName, func(t *testing.T) {
|
|
fs := afero.NewMemMapFs()
|
|
s.before(fs)
|
|
|
|
root, err := findWorktreeRoot(fs, s.currentPath)
|
|
if s.expectedErr != "" {
|
|
assert.EqualError(t, errors.New(s.expectedErr), err.Error())
|
|
} else {
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, s.expectedPath, root)
|
|
}
|
|
})
|
|
}
|
|
}
|