GitRoot

craft your forge, build your project, grow your community freely
  1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
  2//
  3// SPDX-License-Identifier: EUPL-1.2
  4
  5package main
  6
  7import (
  8	"testing"
  9
 10	"gitroot.dev/libs/golang/plugin/model"
 11	"gitroot.dev/libs/golang/plugin/test"
 12)
 13
 14const want = `<!doctype html>
 15<html>
 16<head>
 17<meta charset="UTF-8">
 18<meta name="viewport" content="width=device-width, initial-scale=1.0">
 19<link rel="icon" type="image/jpeg" href="/logo.jpeg">
 20<base href="/test/" />
 21
 22<title>my title</title>
 23<link rel="stylesheet" href="simple.min.css">
 24</head>
 25<body>
 26<header>
 27	/test/
 28	<nav>
 29	<ul></ul>
 30	</nav>
 31</header>
 32<h1 id="title">my title <small>baseline</small></h1>
 33
 34<footer>
 35	<small>clone from ssh://myUrl.myTld/test/</small>
 36</footer>
 37</body>
 38</html>`
 39
 40const wantNotFound = `<!doctype html>
 41<html>
 42<head>
 43<meta charset="UTF-8">
 44<meta name="viewport" content="width=device-width, initial-scale=1.0">
 45<link rel="icon" type="image/jpeg" href="/logo.jpeg">
 46<base href="/test/" />
 47
 48<title>my title</title>
 49<link rel="stylesheet" href="simple.min.css">
 50</head>
 51<body>
 52<header>
 53	{{notavar}}/test/
 54	<nav>
 55	<ul></ul>
 56	</nav>
 57</header>
 58<h1 id="title">my title</h1>
 59
 60<footer>
 61	<small>my page is my title</small>
 62</footer>
 63</body>
 64</html>`
 65
 66func TestRenderHtml(t *testing.T) {
 67	p := Plugin{
 68		server: test.NewFakeServer(t, test.Override{
 69			ForgeConf: func() (model.ForgeConf, error) {
 70				return model.ForgeConf{
 71					Domain: "myUrl.myTld",
 72				}, nil
 73			},
 74		}),
 75	}
 76	p.Init("test", false, `{"favicon":"/logo.jpeg", "header": "{{repo.url}}", "footer":"<small>clone from ssh://{{forge.domain}}{{repo.url}}</small>"}`)
 77	res := p.renderer.render("/help.md", "<h1 id=\"title\">my title <small>baseline</small></h1>\n", map[string]string{})
 78	if res != want {
 79		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 80	}
 81}
 82
 83func TestRenderHtmlVarNotFound(t *testing.T) {
 84	p := Plugin{
 85		server: test.NewFakeServer(t, test.Override{}),
 86	}
 87	p.Init("test", false, `{"favicon":"/logo.jpeg", "header": "{{notavar}}{{repo.url}}", "footer":"<small>my page is {{page.title}}</small>"}`)
 88	res := p.renderer.render("/help.md", "<h1 id=\"title\">my title</h1>\n", map[string]string{})
 89	if res != wantNotFound {
 90		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, wantNotFound)
 91	}
 92}
 93
 94func TestMenu(t *testing.T) {
 95	p := &Plugin{
 96		server: test.NewFakeServer(t, test.Override{}),
 97	}
 98	p.Init("repo", false, `{"menu": [
 99			{"display": "🏠 Home", "link": "/"},
100			{"display": "📖 Documentation", "link": "/doc/"}
101		]}`)
102	menu := p.renderer.buildMenu("/doc/index.md")
103	menuForDoc := "<ul><li><a href=\"./index.html\">🏠 Home</a></li><li><a aria-current=\"page\">📖 Documentation</a></li></ul>"
104	if menu != menuForDoc {
105		t.Errorf("l should be %s but was %s", menuForDoc, menu)
106	}
107}