digital_art_admin_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package webpages
  2. import (
  3. "bytes"
  4. "html/template"
  5. "strings"
  6. "testing"
  7. "git.aetherial.dev/aeth/keiji/pkg/storage"
  8. )
  9. func TestDigitalArtAdminTemplates(t *testing.T) {
  10. tmpl, err := template.ParseFS(content, "html/*.html")
  11. if err != nil {
  12. t.Fatal(err)
  13. }
  14. image := storage.Image{Ident: "abc", Title: "A <title>", Desc: "A & description", MediaType: "image/png"}
  15. video := storage.Image{Ident: "vid", Title: "Video", MediaType: "video/webm"}
  16. cases := []struct {
  17. name string
  18. data any
  19. want []string
  20. }{
  21. {"digital_art_admin_list", map[string]any{"Images": []storage.Image{image, video}}, []string{"/admin/digital/abc", "/admin/digital/vid", "<img ", "<video ", "A &lt;title&gt;", "A &amp; description"}},
  22. {"digital_art_admin_list", map[string]any{"Images": []storage.Image{}}, []string{"No digital art found."}},
  23. {"digital_art_admin_editor", image, []string{"action=\"/admin/digital/abc\"", "method=\"post\"", "hx-post=\"/admin/digital/abc\"", "name=\"title\"", "name=\"description\"", "A &lt;title&gt;", "A &amp; description", "<img ", "hx-get=\"/admin/digital\"", "digital-art-response", `hx-delete="/admin/digital/abc"`, "hx-confirm", "media remains"}},
  24. {"digital_art_admin_editor", video, []string{"<video ", "/api/v1/images/vid", "controls"}},
  25. }
  26. for _, tc := range cases {
  27. var out bytes.Buffer
  28. if err := tmpl.ExecuteTemplate(&out, tc.name, tc.data); err != nil {
  29. t.Fatalf("%s: %v", tc.name, err)
  30. }
  31. for _, want := range tc.want {
  32. if !strings.Contains(out.String(), want) {
  33. t.Errorf("%s: expected %q in output", tc.name, want)
  34. }
  35. }
  36. }
  37. }