v4/templates/templatetesting/templates.go
2025-04-06 19:57:42 -07:00

66 lines
1.2 KiB
Go

// Package testing provides test helpers that support fiber templates
package templatetesting
import (
"bytes"
"html/template"
"io/fs"
"strings"
"testing"
"git.sapphic.engineer/roleypoly/v4/templates"
)
var (
funcMap = template.FuncMap{
"embed": func() string {
return "%%EMBED%%"
},
}
Templates *template.Template = template.New("index").Funcs(funcMap)
)
func init() {
fs.WalkDir(templates.FS, ".", func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
return nil
}
fiberName := strings.Replace(path, ".html", "", 1)
f, err := templates.FS.ReadFile(path)
if err != nil {
return err
}
if fiberName == "index" {
Templates, err = Templates.Parse(string(f))
} else {
_, err = Templates.New(fiberName).Parse(string(f))
}
return err
},
)
}
func Template(t *testing.T, name string, data interface{}) string {
buf := bytes.Buffer{}
err := Templates.ExecuteTemplate(&buf, name, data)
if err != nil {
debugTemplates(t)
t.Fatal("failed to render: ", err)
}
return buf.String()
}
func debugTemplates(t *testing.T) {
for i, tmpl := range Templates.Templates() {
t.Logf("template %d: name=%s", i, tmpl.Name())
}
}