Go 70 lines
package workflow
import (
"os"
"path/filepath"
"testing"
"github.com/ajhahnde/eeco/internal/config"
"github.com/ajhahnde/eeco/internal/manifest"
)
func TestManifestRefresh_WritesSkeletonsForKnowledgeDirs(t *testing.T) {
root := t.TempDir()
userDir := filepath.Join(root, "alice")
// Engine workspace (must be skipped) + two knowledge dirs, one nested.
mustMkdir(t, filepath.Join(userDir, ".eeco", "state"))
mustMkdir(t, filepath.Join(userDir, "backend"))
mustMkdir(t, filepath.Join(userDir, "frontend", "routes"))
mustWrite(t, filepath.Join(userDir, "backend", "main.go"), "package main")
cfg := &config.Config{UserDir: userDir, WorkspaceName: ".eeco"}
res, err := manifestRefresh{}.Run(Env{Config: cfg})
if err != nil {
t.Fatal(err)
}
if res.Code != CodeClean {
t.Fatalf("code = %d, want %d", res.Code, CodeClean)
}
// Top-level dirs AND the nested subdirectory each get a manifest.
for _, d := range []string{"backend", "frontend", filepath.Join("frontend", "routes")} {
if _, err := os.Stat(filepath.Join(userDir, d, manifest.FileName)); err != nil {
t.Fatalf("manifest missing for %s: %v", d, err)
}
}
// The engine workspace must NOT get a manifest.
if _, err := os.Stat(filepath.Join(userDir, ".eeco", manifest.FileName)); !os.IsNotExist(err) {
t.Fatalf("engine workspace should be skipped, stat err = %v", err)
}
}
func TestManifestRefresh_NoKnowledgeDirsIsCleanNoop(t *testing.T) {
root := t.TempDir()
userDir := filepath.Join(root, "alice")
mustMkdir(t, filepath.Join(userDir, ".eeco"))
cfg := &config.Config{UserDir: userDir, WorkspaceName: ".eeco"}
res, err := manifestRefresh{}.Run(Env{Config: cfg})
if err != nil {
t.Fatal(err)
}
if res.Code != CodeClean {
t.Fatalf("code = %d, want %d", res.Code, CodeClean)
}
}
func mustMkdir(t *testing.T, p string) {
t.Helper()
if err := os.MkdirAll(p, 0o755); err != nil {
t.Fatal(err)
}
}
func mustWrite(t *testing.T, p, body string) {
t.Helper()
if err := os.WriteFile(p, []byte(body), 0o644); err != nil {
t.Fatal(err)
}
}