template testing helpers

This commit is contained in:
41666 2025-04-06 19:57:42 -07:00
parent df33164b08
commit 1c533926ca
5 changed files with 84 additions and 34 deletions

View file

@ -1,31 +1,20 @@
package components_test
import (
"bytes"
"fmt"
"html/template"
"testing"
"git.sapphic.engineer/roleypoly/v4/presentation"
"git.sapphic.engineer/roleypoly/v4/templates"
"git.sapphic.engineer/roleypoly/v4/templates/templatetesting"
"git.sapphic.engineer/roleypoly/v4/types"
"git.sapphic.engineer/roleypoly/v4/types/fixtures"
"git.sapphic.engineer/roleypoly/v4/utils"
"github.com/stretchr/testify/assert"
)
var (
Templates = template.Must(template.ParseFS(templates.FS, "components/*.html"))
)
func renderRole(t *testing.T, c *types.Category, r *types.Role, s bool) string {
data := presentation.Role(c, r, s)
buf := bytes.Buffer{}
err := Templates.ExecuteTemplate(&buf, "role.html", data)
if err != nil {
t.Fatal("template failed to render", err)
}
return buf.String()
return templatetesting.Template(t, "components/role", data)
}
func TestRole(t *testing.T) {

View file

@ -0,0 +1,66 @@
// 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())
}
}

View file

@ -0,0 +1,16 @@
package templatetesting_test
import (
"testing"
"git.sapphic.engineer/roleypoly/v4/templates/templatetesting"
"github.com/stretchr/testify/assert"
)
func TestRender(t *testing.T) {
for _, template := range templatetesting.Templates.Templates() {
assert.NotPanicsf(t, func() {
templatetesting.Template(t, template.Name(), nil)
}, "rendering %s", template.Name())
}
}

View file

@ -1,14 +0,0 @@
// Package testing provides test helpers that support fiber templates
package testing
import (
"html/template"
"git.sapphic.engineer/roleypoly/v4/templates"
)
var (
Templates = template.Must(template.ParseFS(templates.FS, "*.html")).Funcs(template.FuncMap{
"embed": func() {},
})
)

View file

@ -1,7 +0,0 @@
package testing_test
// func Test(t *testing.T) {
// }
// TODO: test the template tester