feat: tests for http handlers and render package
This commit is contained in:
@ -1,6 +1,10 @@
|
||||
package render
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
@ -50,3 +54,92 @@ Check this out [here](http://tatata.toto)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTemplateManagerGetTemplate_Caches(t *testing.T) {
|
||||
baseDir := t.TempDir()
|
||||
writeTemplate(t, baseDir, "base.tmpl", `{{ define "base" }}base{{ end }}`)
|
||||
writeTemplate(t, baseDir, "index.tmpl", `{{ define "content" }}index{{ end }}`)
|
||||
|
||||
tm := NewTemplateManager(baseDir)
|
||||
td := &TemplateData{
|
||||
Name: "index",
|
||||
FileNameSet: []string{"base", "index"},
|
||||
}
|
||||
|
||||
first, err := tm.GetTemplate(td)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
second, err := tm.GetTemplate(td)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if first != second {
|
||||
t.Fatalf("expected cached template instance")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTemplateManagerGetTemplate_Missing(t *testing.T) {
|
||||
baseDir := t.TempDir()
|
||||
tm := NewTemplateManager(baseDir)
|
||||
|
||||
td := &TemplateData{
|
||||
Name: "missing",
|
||||
FileNameSet: []string{"missing"},
|
||||
}
|
||||
|
||||
if _, err := tm.GetTemplate(td); err == nil {
|
||||
t.Fatalf("expected error for missing template")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTemplateManagerRender(t *testing.T) {
|
||||
baseDir := t.TempDir()
|
||||
writeTemplate(t, baseDir, "base.tmpl", `{{ define "base" }}<html>{{ template "content" . }}</html>{{ end }}`)
|
||||
writeTemplate(t, baseDir, "noteList.tmpl", `{{ define "noteList" }}notes{{ end }}`)
|
||||
writeTemplate(t, baseDir, "index.tmpl", `{{ define "content" }}hello{{ end }}`)
|
||||
|
||||
tm := NewTemplateManager(baseDir)
|
||||
rec := httptest.NewRecorder()
|
||||
|
||||
err := tm.Render(rec, "index", map[string]string{"msg": "hi"})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if ct := rec.Header().Get("Content-Type"); ct != "text/html; charset=utf-8" {
|
||||
t.Fatalf("expected content-type text/html; charset=utf-8, got %q", ct)
|
||||
}
|
||||
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("expected status 200, got %d", rec.Code)
|
||||
}
|
||||
|
||||
if !strings.Contains(rec.Body.String(), "hello") {
|
||||
t.Fatalf("expected rendered template content")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTemplateManagerRender_MissingTemplate(t *testing.T) {
|
||||
baseDir := t.TempDir()
|
||||
writeTemplate(t, baseDir, "base.tmpl", `{{ define "base" }}<html>{{ template "content" . }}</html>{{ end }}`)
|
||||
writeTemplate(t, baseDir, "noteList.tmpl", `{{ define "noteList" }}notes{{ end }}`)
|
||||
|
||||
tm := NewTemplateManager(baseDir)
|
||||
rec := httptest.NewRecorder()
|
||||
|
||||
if err := tm.Render(rec, "index", nil); err == nil {
|
||||
t.Fatalf("expected error for missing template")
|
||||
}
|
||||
}
|
||||
|
||||
func writeTemplate(t *testing.T, dir, name, contents string) {
|
||||
t.Helper()
|
||||
|
||||
path := filepath.Join(dir, name)
|
||||
if err := os.WriteFile(path, []byte(contents), 0o600); err != nil {
|
||||
t.Fatalf("write template %s: %v", name, err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user