package render import ( "net/http" "net/http/httptest" "os" "path/filepath" "strings" "testing" ) func TestRenderMarkdown(t *testing.T) { cases := []struct { name string markdown string want string }{ { name: "Markdown, no link", markdown: `# Test ## 01/24/26 09:14:20 - some entry check this out`, want: `
check this out
`, }, { name: "Markdown, some link", markdown: `# Test 2 ## 01/24/26 09:14:20 - some entry (bare link) Check this out http://tatata.toto here `, want: `Check this out http://tatata.toto here
`, }, { name: "Markdown, some link with description", markdown: `# Test 2 ## 01/24/26 09:14:20 - some entry (bare link) Check this out [here](http://tatata.toto) `, want: `Check this out here
`, }, } for _, test := range cases { got, err := RenderMarkdown([]byte(test.markdown)) if err != nil { t.Errorf("Error rendering markdown: '%s'\n", err) } strip := strings.ReplaceAll(string(got), "\n", "") strip = strings.Trim(strip, " ") if strip != test.want { t.Errorf("Rendering markdown: Wanted '%s', got '%s'.\n", test.want, strip) } } } 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" }}{{ template "content" . }}{{ end }}`) writeTemplate(t, baseDir, "noteList.tmpl", `{{ define "noteList" }}notes{{ end }}`) writeTemplate(t, baseDir, "metadata.tmpl", `{{ define "metadata" }}meta{{ end }}`) writeTemplate(t, baseDir, "index.tmpl", `{{ define "content" }}hello{{ end }}`) writeTemplate(t, baseDir, "metadata.tmpl", `{{ define "noteList" }}notes{{ 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" }}{{ template "content" . }}{{ end }}`) writeTemplate(t, baseDir, "noteList.tmpl", `{{ define "noteList" }}notes{{ end }}`) writeTemplate(t, baseDir, "metadata.tmpl", `{{ define "metadata" }}meta{{ end }}`) writeTemplate(t, baseDir, "metadata.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) } }