From 9f35f7149d8fb790bbe8e4f0ee74f895aea1fc58 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Tue, 3 Feb 2026 15:15:07 -1000 Subject: Refactor template rendering with Renderer interface for testability Introduce a Renderer interface to abstract template rendering, enabling tests to use MockRenderer instead of requiring real template files. Changes: - Add renderer.go with Renderer interface, TemplateRenderer, and MockRenderer - Update Handler struct to use Renderer instead of *template.Template - Update HTMLResponse() to accept Renderer interface - Replace all h.templates.ExecuteTemplate() calls with h.renderer.Render() - Update all tests to use MockRenderer, removing template file dependencies This eliminates 15+ tests that previously skipped with "Templates not available" and improves test isolation. Co-Authored-By: Claude Opus 4.5 --- internal/handlers/agent.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'internal/handlers/agent.go') diff --git a/internal/handlers/agent.go b/internal/handlers/agent.go index 92f4ce8..15715bc 100644 --- a/internal/handlers/agent.go +++ b/internal/handlers/agent.go @@ -99,11 +99,11 @@ func timelineItemToAgentItem(item models.TimelineItem) agentContextItem { // renderAgentTemplate renders an agent template with common error handling func (h *Handler) renderAgentTemplate(w http.ResponseWriter, templateName string, data interface{}) { w.Header().Set("Content-Type", "text/html; charset=utf-8") - if h.templates == nil { - h.renderAgentError(w, "Templates not loaded", http.StatusInternalServerError) + if h.renderer == nil { + h.renderAgentError(w, "Renderer not configured", http.StatusInternalServerError) return } - if err := h.templates.ExecuteTemplate(w, templateName, data); err != nil { + if err := h.renderer.Render(w, templateName, data); err != nil { h.renderAgentError(w, "Template error", http.StatusInternalServerError) } } @@ -539,13 +539,13 @@ func (h *Handler) HandleAgentWebContext(w http.ResponseWriter, r *http.Request) func (h *Handler) renderAgentError(w http.ResponseWriter, message string, status int) { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.WriteHeader(status) - if h.templates != nil { - _ = h.templates.ExecuteTemplate(w, "agent-error.html", map[string]interface{}{ + if h.renderer != nil { + _ = h.renderer.Render(w, "agent-error.html", map[string]interface{}{ "Error": message, "Status": status, }) } else { - // Fallback if template not loaded + // Fallback if renderer not configured w.Write([]byte(`Error

Error

` + message + `

`)) } } -- cgit v1.2.3