package seriatim import ( "context" "errors" "os" "path/filepath" "strings" "testing" ) func TestFakeRunnerCapturesRequestAndReturnsPath(t *testing.T) { fake := &FakeRunner{} dir := t.TempDir() req := MergeRequest{ GeneratedConfigPath: filepath.Join(dir, "config", "seriatim.yml"), OutputMergedTranscriptPath: filepath.Join(dir, "transcripts", "merged.json"), StdoutLogPath: filepath.Join(dir, "logs", "seriatim.stdout.log"), StderrLogPath: filepath.Join(dir, "logs", "seriatim.stderr.log"), } res, err := fake.Run(context.Background(), req) if err != nil { t.Fatalf("Run() error = %v", err) } if len(fake.Requests) != 1 || fake.Requests[0].GeneratedConfigPath == "" { t.Fatalf("requests = %#v, want captured request", fake.Requests) } if res.MergedTranscriptPath != req.OutputMergedTranscriptPath { t.Fatalf("merged path = %q, want %q", res.MergedTranscriptPath, req.OutputMergedTranscriptPath) } cfgData, err := os.ReadFile(req.GeneratedConfigPath) if err != nil { t.Fatalf("read generated config: %v", err) } if !strings.Contains(string(cfgData), "placeholder: true") { t.Fatalf("generated config = %q, want placeholder marker", string(cfgData)) } for _, logPath := range []string{req.StdoutLogPath, req.StderrLogPath} { if _, err := os.Stat(logPath); err != nil { t.Fatalf("expected log file %q to exist: %v", logPath, err) } } } func TestFakeRunnerError(t *testing.T) { fake := &FakeRunner{Err: errors.New("boom")} _, err := fake.Run(context.Background(), MergeRequest{}) if err == nil { t.Fatal("expected error, got nil") } }