diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-02-03 15:15:07 -1000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-02-03 15:15:07 -1000 |
| commit | 9f35f7149d8fb790bbe8e4f0ee74f895aea1fc58 (patch) | |
| tree | 5faa41878609a5c9c332b794a85300090d65bec5 /internal/handlers/agent.go | |
| parent | f10044eac1997537bcdf7699f5b4284aac16f8e2 (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'internal/handlers/agent.go')
| -rw-r--r-- | internal/handlers/agent.go | 12 |
1 files changed, 6 insertions, 6 deletions
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(`<!DOCTYPE html><html><head><title>Error</title></head><body><h1>Error</h1><p>` + message + `</p></body></html>`)) } } |
