mirror of
https://github.com/grdl/git-get.git
synced 2026-02-04 22:04:41 +00:00
Path is for URLs, filepath is for os paths. This solves the problem with wrong repo root on windows.
96 lines
1.8 KiB
Go
96 lines
1.8 KiB
Go
package git
|
|
|
|
import (
|
|
"git-get/pkg/io"
|
|
"git-get/pkg/run"
|
|
"git-get/pkg/test"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
// cfgStub represents a gitconfig file but instead of using a global one, it creates a temporary git repo and uses its local gitconfig.
|
|
type cfgStub struct {
|
|
repo *test.Repo
|
|
}
|
|
|
|
func newCfgStub(t *testing.T) *cfgStub {
|
|
r := test.RepoEmpty(t)
|
|
return &cfgStub{
|
|
repo: r,
|
|
}
|
|
}
|
|
|
|
func (c *cfgStub) Get(key string) string {
|
|
out, err := run.Git("config", "--local", key).OnRepo(c.repo.Path()).AndCaptureLine()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
func TestGitConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
configMaker func(t *testing.T) *cfgStub
|
|
key string
|
|
want string
|
|
}{
|
|
{
|
|
name: "empty",
|
|
configMaker: makeConfigEmpty,
|
|
key: "gitget.host",
|
|
want: "",
|
|
},
|
|
{
|
|
name: "valid",
|
|
configMaker: makeConfigValid,
|
|
key: "gitget.host",
|
|
want: "github.com",
|
|
}, {
|
|
name: "only section name",
|
|
configMaker: makeConfigValid,
|
|
key: "gitget",
|
|
want: "",
|
|
}, {
|
|
name: "missing key",
|
|
configMaker: makeConfigValid,
|
|
key: "gitget.missingkey",
|
|
want: "",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
cfg := test.configMaker(t)
|
|
|
|
got := cfg.Get(test.key)
|
|
|
|
if got != test.want {
|
|
t.Errorf("expected %q; got %q", test.want, got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func makeConfigEmpty(t *testing.T) *cfgStub {
|
|
c := newCfgStub(t)
|
|
io.Write(filepath.Join(c.repo.Path(), dotgit, "config"), "")
|
|
|
|
return c
|
|
}
|
|
|
|
func makeConfigValid(t *testing.T) *cfgStub {
|
|
c := newCfgStub(t)
|
|
|
|
gitconfig := `
|
|
[user]
|
|
name = grdl
|
|
[gitget]
|
|
host = github.com
|
|
`
|
|
io.Write(filepath.Join(c.repo.Path(), dotgit, "config"), gitconfig)
|
|
|
|
return c
|
|
}
|