Git Repository
Stackyard
Stackyard scannt lokale Entwicklungsordner und bündelt Projekte, Git-Status, TODOs, Toolchains, Docker-Compose-Setups, Datei- und Launcher-Funktionen sowie Operations-Informationen in einer lokalen WebUI.
HTTPS
https://zanvex.de/git/stackyard.gitinternal/scanner/scanner_test.go
Zum Verzeichnispackage scanner
import (
"os"
"path/filepath"
"runtime"
"testing"
"stackyard/internal/config"
)
func TestScanFindsProjectsAndIgnoresLargeDirs(t *testing.T) {
root := t.TempDir()
mustWriteFile(t, filepath.Join(root, "service-a", "go.mod"), "module service-a\n")
mustWriteFile(t, filepath.Join(root, "service-a", "README.md"), "# service-a\n")
mustWriteFile(t, filepath.Join(root, "node_modules", "ignored", "package.json"), "{}")
mustWriteFile(t, filepath.Join(root, "nested", "api", "pyproject.toml"), "[project]\nname='api'\n")
s := New(config.ScannerConfig{
MaxDepth: 2,
IgnoreDirs: []string{"node_modules"},
})
results, err := s.Scan([]config.RootConfig{{Name: "DEV", Path: root}})
if err != nil {
t.Fatalf("scan: %v", err)
}
if len(results) != 2 {
t.Fatalf("expected 2 projects, got %d", len(results))
}
foundTypes := map[string]bool{}
for _, result := range results {
foundTypes[result.PrimaryType] = true
}
if !foundTypes["go"] || !foundTypes["python"] {
t.Fatalf("expected go and python projects, got %#v", foundTypes)
}
}
func TestScanSkipsSymlinkedDirectories(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("symlink creation is not reliable on all Windows test setups")
}
root := t.TempDir()
target := filepath.Join(root, "target")
if err := os.MkdirAll(target, 0o755); err != nil {
t.Fatalf("mkdir target: %v", err)
}
mustWriteFile(t, filepath.Join(target, "go.mod"), "module target\n")
link := filepath.Join(root, "link-project")
if err := os.Symlink(target, link); err != nil {
t.Fatalf("symlink: %v", err)
}
s := New(config.ScannerConfig{MaxDepth: 2})
results, err := s.Scan([]config.RootConfig{{Name: "DEV", Path: root}})
if err != nil {
t.Fatalf("scan: %v", err)
}
if len(results) != 1 {
t.Fatalf("expected only real directory to be scanned, got %d", len(results))
}
}
func TestScanStopsDescendingIntoDetectedProjects(t *testing.T) {
root := t.TempDir()
mustWriteFile(t, filepath.Join(root, "repo", "go.mod"), "module repo\n")
mustWriteFile(t, filepath.Join(root, "repo", "nested", "package.json"), "{}\n")
s := New(config.ScannerConfig{MaxDepth: 3})
results, err := s.Scan([]config.RootConfig{{Name: "DEV", Path: root}})
if err != nil {
t.Fatalf("scan: %v", err)
}
if len(results) != 1 {
t.Fatalf("expected only top-level project, got %d", len(results))
}
}
func mustWriteFile(t *testing.T, path, body string) {
t.Helper()
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
t.Fatalf("mkdir %s: %v", path, err)
}
if err := os.WriteFile(path, []byte(body), 0o644); err != nil {
t.Fatalf("write %s: %v", path, err)
}
}