package app import ( "bytes" "context" "os" "path/filepath" "strings" "testing" "gitea.maximumdirect.net/eric/narratio/internal/artifacts" ) func TestPlanCreatesAndReusesWorkdir(t *testing.T) { workspaceRoot := t.TempDir() pipelinePath, sessionPath := writeValidConfigFiles(t, workspaceRoot) var out bytes.Buffer args := []string{"--config", pipelinePath, "--session", sessionPath} if err := Plan(context.Background(), args, &out); err != nil { t.Fatalf("first Plan() error = %v", err) } if !strings.Contains(out.String(), "workdir prepared") { t.Fatalf("first output = %q, want workdir prepared", out.String()) } sessionWorkdir := artifacts.SessionWorkDir(workspaceRoot, "2026-05-03") expectedDirs := []string{ sessionWorkdir, filepath.Join(sessionWorkdir, "inputs"), filepath.Join(sessionWorkdir, "audio"), filepath.Join(sessionWorkdir, "transcripts", "raw"), filepath.Join(sessionWorkdir, "transcripts", "normalized"), filepath.Join(sessionWorkdir, "artifacts"), filepath.Join(sessionWorkdir, "config"), filepath.Join(sessionWorkdir, "logs"), } for _, dir := range expectedDirs { assertDir(t, dir) } out.Reset() if err := Plan(context.Background(), args, &out); err != nil { t.Fatalf("second Plan() error = %v", err) } if !strings.Contains(out.String(), "workdir prepared") { t.Fatalf("second output = %q, want workdir prepared", out.String()) } } func assertDir(t *testing.T, path string) { t.Helper() info, err := os.Stat(path) if err != nil { t.Fatalf("Stat(%q) error = %v", path, err) } if !info.IsDir() { t.Fatalf("%q is not a directory", path) } }