package blockpage
import (
"crypto/tls"
"io"
"log/slog"
"strings"
"testing"
)
func discardLogger() *slog.Logger {
return slog.New(slog.NewTextHandler(io.Discard, nil))
}
func TestRenderFillsPlaceholders(t *testing.T) {
out, err := Render(`
{{.Domain}} blocked by {{.ListName}} ({{.PolicyName}})
`)
if err != nil {
t.Fatalf("render: %v", err)
}
if !strings.Contains(out, "ads.example-tracker.com blocked by Advertising (Default Protection)") {
t.Errorf("unexpected output: %s", out)
}
}
func TestRenderRejectsInvalidTemplate(t *testing.T) {
if _, err := Render(`{{.Domain`); err == nil {
t.Fatal("expected a parse error for unterminated action")
}
}
func TestRenderEscapesAttackerControlledDomain(t *testing.T) {
// html/template must escape a hostile-looking hostname; a browser-facing
// error page has no business ever emitting attacker HTML unescaped.
out, err := Render(`{{.Domain}}
`)
if err != nil {
t.Fatalf("render: %v", err)
}
if strings.Contains(out, "