6
0
mirror of https://github.com/grdl/git-get.git synced 2026-02-04 19:09:45 +00:00

Add repo finder tests

This commit is contained in:
Grzegorz Dlugoszewski
2020-07-08 14:58:19 +02:00
parent cdca8b89d9
commit 13e936c376
4 changed files with 116 additions and 20 deletions

View File

@@ -81,12 +81,13 @@ func (r *RepoFinder) walkCb(path string, ent *godirwalk.Dirent) error {
r.repos = append(r.repos, strings.TrimSuffix(path, ".git"))
return errSkipNode
}
// Do not traverse directories containing a .git directory
if ent.IsDir() {
_, err := os.Stat(filepath.Join(path, ".git"))
if err == nil {
r.repos = append(r.repos, strings.TrimSuffix(path, ".git"))
return ErrSkipNode
return errSkipNode
}
}
return nil

90
pkg/git/finder_test.go Normal file
View File

@@ -0,0 +1,90 @@
package git
import (
"git-get/pkg/test"
"testing"
)
func TestFinder(t *testing.T) {
tests := []struct {
name string
reposMaker func(*testing.T) string
want int
}{
{
name: "no repos",
reposMaker: makeNoRepos,
want: 0,
},
{
name: "single repos",
reposMaker: makeSingleRepo,
want: 1,
},
{
name: "single nested repo",
reposMaker: makeNestedRepo,
want: 1,
},
{
name: "multiple nested repo",
reposMaker: makeMultipleNestedRepos,
want: 2,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
root := test.reposMaker(t)
finder := NewRepoFinder(root)
paths, _ := finder.Find()
if len(paths) != test.want {
t.Errorf("expected %d; got %d", test.want, len(paths))
}
})
}
}
func makeNoRepos(t *testing.T) string {
root := test.TempDir(t, "")
return root
}
func makeSingleRepo(t *testing.T) string {
root := test.TempDir(t, "")
test.RepoEmptyInDir(t, root)
return root
}
func makeNestedRepo(t *testing.T) string {
// a repo with single nested repo should still be counted as one beacause finder doesn't traverse inside nested repos
root := test.TempDir(t, "")
r := test.RepoEmptyInDir(t, root)
test.RepoEmptyInDir(t, r.Path())
return root
}
func makeMultipleNestedRepos(t *testing.T) string {
root := test.TempDir(t, "")
// create two repos inside root - should be counted as 2
repo1 := test.RepoEmptyInDir(t, root)
repo2 := test.RepoEmptyInDir(t, root)
// created repos nested inside two parent roots - shouldn't be counted
test.RepoEmptyInDir(t, repo1.Path())
test.RepoEmptyInDir(t, repo1.Path())
test.RepoEmptyInDir(t, repo2.Path())
// create a empty dir inside root - shouldn't be counted
test.TempDir(t, root)
return root
}

View File

@@ -9,6 +9,23 @@ import (
"testing"
)
// TempDir creates a temporary directory inside the parent dir.
// If parent is empty, it will use a system default temp dir (usually /tmp).
func TempDir(t *testing.T, parent string) string {
dir, err := ioutil.TempDir(parent, "git-get-repo-")
checkFatal(t, err)
// Automatically remove temp dir when the test is over.
t.Cleanup(func() {
err := os.RemoveAll(dir)
if err != nil {
t.Errorf("failed removing test repo %s", dir)
}
})
return dir
}
func (r *Repo) init() {
err := run.Git("init", "--quiet", r.path).AndShutUp()
checkFatal(r.t, err)
@@ -51,7 +68,7 @@ func (r *Repo) checkout(name string) {
}
func (r *Repo) clone() *Repo {
dir := tempDir(r.t, "")
dir := TempDir(r.t, "")
url := fmt.Sprintf("file://%s/.git", r.path)
err := run.Git("clone", url, dir).AndShutUp()
@@ -70,23 +87,6 @@ func (r *Repo) fetch() {
checkFatal(r.t, err)
}
// tempDir creates a temporary directory inside the parent dir.
// If parent is empty, it will use a system default temp dir (usually /tmp).
func tempDir(t *testing.T, parent string) string {
dir, err := ioutil.TempDir(parent, "git-get-repo-")
checkFatal(t, err)
// Automatically remove temp dir when the test is over.
t.Cleanup(func() {
err := os.RemoveAll(dir)
if err != nil {
t.Errorf("failed removing test repo %s", dir)
}
})
return dir
}
func checkFatal(t *testing.T, err error) {
if err != nil {
t.Fatalf("failed making test repo: %+v", err)

View File

@@ -19,8 +19,13 @@ func (r *Repo) Path() string {
// RepoEmpty creates an empty git repo.
func RepoEmpty(t *testing.T) *Repo {
return RepoEmptyInDir(t, "")
}
// RepoEmptyInDir creates an empty git repo inside a given parent dir.
func RepoEmptyInDir(t *testing.T, parent string) *Repo {
r := &Repo{
path: tempDir(t, ""),
path: TempDir(t, parent),
t: t,
}