package app import ( "context" "os" "strings" "testing" "gitea.maximumdirect.net/eric/narratio/internal/config" ) func TestLoadCommandConfigRetainsInitiallyLoadedPipeline(t *testing.T) { workspaceRoot := t.TempDir() pipelinePath, campaignPath, sessionPath := writeValidConfigFiles(t, workspaceRoot) originalLoader := loadPipelineConfigFn loadCalls := 0 loadPipelineConfigFn = func(path string, opts config.PipelineLoadOptions) (*config.PipelineConfig, error) { loaded, err := originalLoader(path, opts) if err != nil { return nil, err } loadCalls++ data, err := os.ReadFile(path) if err != nil { return nil, err } changedRoot := workspaceRoot + "-changed" updated := strings.ReplaceAll(string(data), workspaceRoot, changedRoot) if err := os.WriteFile(path, []byte(updated), 0o644); err != nil { return nil, err } return loaded, nil } t.Cleanup(func() { loadPipelineConfigFn = originalLoader }) loaded, err := loadCommandConfig(context.Background(), pipelinePath, "", campaignPath, sessionPath, config.SessionLoadOptions{SessionID: "2026-05-03"}) if err != nil { t.Fatalf("loadCommandConfig() error = %v", err) } defer func() { _ = loaded.Close() }() if loadCalls != 1 { t.Fatalf("pipeline load calls = %d, want 1", loadCalls) } if got := loaded.Config.Pipeline.Workspace.Root; got != workspaceRoot { t.Fatalf("resolved workspace root = %q, want originally loaded %q", got, workspaceRoot) } }