66 lines
1.2 KiB
Go
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())
|
|
}
|
|
}
|