mirror of
https://github.com/grdl/git-get.git
synced 2026-02-05 19:27:57 +00:00
Add repo finder tests
This commit is contained in:
@@ -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
90
pkg/git/finder_test.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user