package workflow import ( "os" "os/exec" "path/filepath" "testing" "github.com/ajhahnde/eeco/internal/config" ) // newCfg returns a config rooted at a fresh temp repo with an // initialised-looking workspace (the directories the workflows touch). func newCfg(t *testing.T) *config.Config { return newCfgWithProfile(t, config.ProfileGeneric) } // newCfgWithProfile is the profile-parameterised form of newCfg, used by // tests that need to exercise per-profile behaviour (e.g. scaffold // template selection). func newCfgWithProfile(t *testing.T, profile config.Profile) *config.Config { t.Helper() root := t.TempDir() ws := filepath.Join(root, ".eeco") for _, d := range []string{"workflows", "state", "memory"} { if err := os.MkdirAll(filepath.Join(ws, d), 0o755); err != nil { t.Fatal(err) } } return &config.Config{ RepoRoot: root, WorkspaceName: ".eeco", Workspace: ws, Profile: profile, StaleDays: config.DefaultStaleDays, } } func writeRepoFile(t *testing.T, root, rel, content string) { t.Helper() full := filepath.Join(root, rel) if err := os.MkdirAll(filepath.Dir(full), 0o755); err != nil { t.Fatal(err) } if err := os.WriteFile(full, []byte(content), 0o644); err != nil { t.Fatal(err) } } // gitInit makes root a real git repo and stages everything currently in // it. Tests that need tracked files call this after writing them. func gitInit(t *testing.T, root string) { t.Helper() if _, err := exec.LookPath("git"); err != nil { t.Skip("git not available") } for _, args := range [][]string{ {"init", "-q"}, {"config", "user.email", "t@example.com"}, {"config", "user.name", "t"}, {"add", "-A"}, } { cmd := exec.Command("git", args...) cmd.Dir = root if out, err := cmd.CombinedOutput(); err != nil { t.Fatalf("git %v: %v\n%s", args, err, out) } } }