62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|