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/response.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'internal/handlers/response.go') diff --git a/internal/handlers/response.go b/internal/handlers/response.go index 34d4491..679a452 100644 --- a/internal/handlers/response.go +++ b/internal/handlers/response.go @@ -2,7 +2,6 @@ package handlers import ( "encoding/json" - "html/template" "log" "net/http" ) @@ -30,10 +29,10 @@ func JSONError(w http.ResponseWriter, status int, msg string, err error) { } // HTMLResponse renders an HTML template -func HTMLResponse(w http.ResponseWriter, tmpl *template.Template, name string, data interface{}) { +func HTMLResponse(w http.ResponseWriter, r Renderer, name string, data interface{}) { w.Header().Set("Content-Type", "text/html; charset=utf-8") noCacheHeaders(w) - if err := tmpl.ExecuteTemplate(w, name, data); err != nil { + if err := r.Render(w, name, data); err != nil { http.Error(w, "Failed to render template", http.StatusInternalServerError) log.Printf("Error rendering template %s: %v", name, err) } -- cgit v1.2.3