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}