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
 11func TestSimpleMetadata(t *testing.T) {
 12	p := &Plugin{}
 13	res, meta := p.mdToHTML("index.md", []byte("---\ncoucou: hello\napexRenderMetadatas: true\n---\n#Title"), map[string]string{})
 14	want := "<dl><dt>coucou</dt><dd>hello</dd></dl>\n\n<p>#Title</p>\n"
 15	if res != want {
 16		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 17	}
 18	if val, ok := meta["coucou"]; !ok || val != "hello" {
 19		t.Errorf("meta coucou should be hello but was %s", val)
 20	}
 21}
 22
 23func TestBadMetadata(t *testing.T) {
 24	p := &Plugin{}
 25	res, meta := p.mdToHTML("index.md", []byte("---\n#Title"), map[string]string{})
 26	want := "\n<hr>\n<p>#Title</p>\n"
 27	if res != want {
 28		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 29	}
 30	if len(meta) != 0 {
 31		t.Errorf("meta should be empty")
 32	}
 33}
 34
 35func TestComplexeMetadata(t *testing.T) {
 36	p := &Plugin{}
 37	res, meta := p.mdToHTML("index.md", []byte("---\n\"og:title\": hello\napexRenderMetadatas: true\n---\n#Title"), map[string]string{})
 38	want := "<dl><dt>og:title</dt><dd>hello</dd></dl>\n\n<p>#Title</p>\n"
 39	if res != want {
 40		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 41	}
 42	if val, ok := meta["og:title"]; !ok || val != "hello" {
 43		t.Errorf("meta og:title should be hello but was %s", val)
 44	}
 45}
 46
 47func TestComplexeMetadataSpace(t *testing.T) {
 48	p := &Plugin{}
 49	res, meta := p.mdToHTML("index.md", []byte("---\nchecksum: sha256:e6e94e\napexRenderMetadatas: true\n---\n#Title"), map[string]string{})
 50	want := "<dl><dt>checksum</dt><dd>sha256:e6e94e</dd></dl>\n\n<p>#Title</p>\n"
 51	if res != want {
 52		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 53	}
 54	if val, ok := meta["checksum"]; !ok || val != "sha256:e6e94e" {
 55		t.Errorf("meta checksum should be sha256:e6e94e but was %s", val)
 56	}
 57}
 58
 59func TestMetadataNoValue(t *testing.T) {
 60	p := &Plugin{}
 61	res, _ := p.mdToHTML("index.md", []byte("---\ncoucou:\napexRenderMetadatas: true\n---\n#Title"), map[string]string{})
 62	want := "<dl><dt>coucou</dt><dd></dd></dl>\n\n<p>#Title</p>\n"
 63	if res != want {
 64		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 65	}
 66}
 67
 68func TestBreakPage(t *testing.T) {
 69	p := &Plugin{}
 70	res, _ := p.mdToHTML("index.md", []byte("# Title\n\nHello world!\n\n---\n\nKiss"), map[string]string{})
 71	want := "<h1 id=\"title\">Title</h1>\n\n<p>Hello world!</p>\n\n<hr>\n\n<p>Kiss</p>\n"
 72	if res != want {
 73		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 74	}
 75}
 76
 77func TestBreakPageAndMeta(t *testing.T) {
 78	p := &Plugin{}
 79	res, _ := p.mdToHTML("index.md", []byte("---\ncoucou:\napexRenderMetadatas: true\n---\n# Title\n\nHello world!\n\n---\n\nKiss"), map[string]string{})
 80	want := "<dl><dt>coucou</dt><dd></dd></dl>\n\n<h1 id=\"title\">Title</h1>\n\n<p>Hello world!</p>\n\n<hr>\n\n<p>Kiss</p>\n"
 81	if res != want {
 82		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 83	}
 84}
 85
 86func TestBreakPageAndMeta2(t *testing.T) {
 87	p := &Plugin{}
 88	res, _ := p.mdToHTML("index.md", []byte("---\ncoucou\napexRenderMetadatas: true\n---\n# Title\n\nHello world!\n\n---\n\nKiss"), map[string]string{})
 89	want := "<dl><dt>coucou</dt><dd></dd></dl>\n\n<h1 id=\"title\">Title</h1>\n\n<p>Hello world!</p>\n\n<hr>\n\n<p>Kiss</p>\n"
 90	if res != want {
 91		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
 92	}
 93}
 94
 95func TestLink(t *testing.T) {
 96	p := &Plugin{}
 97	res, _ := p.mdToHTML("/issues/1.md", []byte("[other](../2.md)"), map[string]string{})
 98	want := "<p><a href=\"/2.html\">other</a></p>\n"
 99	if res != want {
100		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
101	}
102}
103
104func TestLinkAnchor(t *testing.T) {
105	p := &Plugin{}
106	res, _ := p.mdToHTML("/issues/1.md", []byte("[other](../2.md#title)"), map[string]string{})
107	want := "<p><a href=\"/2.html#title\">other</a></p>\n"
108	if res != want {
109		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
110	}
111}
112
113func TestLinkInternalAnchor(t *testing.T) {
114	p := &Plugin{}
115	res, _ := p.mdToHTML("/issues/1.md", []byte("[other](#title)"), map[string]string{})
116	want := "<p><a href=\"/issues/1.html#title\">other</a></p>\n"
117	if res != want {
118		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
119	}
120}
121
122func TestLinkrelative(t *testing.T) {
123	p := &Plugin{}
124	res, _ := p.mdToHTML("/boards/board.md", []byte("[other](../issues/issue_44.md)"), map[string]string{})
125	want := "<p><a href=\"/issues/issue_44.html\">other</a></p>\n"
126	if res != want {
127		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
128	}
129}
130
131func TestHorizontalRule(t *testing.T) {
132	p := &Plugin{}
133	res, _ := p.mdToHTML("/boards/board.md", []byte("---\ncoucou\napexRenderMetadatas: true\nhorizontalRuleMetadatas: article---\n# Title\n\nHello world!\n\n---\n\nKiss"), map[string]string{})
134	want := "<dl><dt>coucou</dt><dd></dd></dl>\n\n<article><h1 id=\"title\">Title</h1>\n\n<p>Hello world!</p>\n\n</article><article>\n\n<p>Kiss</p>\n</article>"
135	if res != want {
136		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
137	}
138}
139
140func TestHorizontalRuleExtraMetadata(t *testing.T) {
141	p := &Plugin{}
142	res, _ := p.mdToHTML("/boards/board.md", []byte("---\ncoucou\napexRenderMetadatas: true---\n# Title\n\nHello world!\n\n---\n\nKiss"), map[string]string{"horizontalRuleMetadatas": "section"})
143	want := "<dl><dt>coucou</dt><dd></dd></dl>\n\n<section><h1 id=\"title\">Title</h1>\n\n<p>Hello world!</p>\n\n</section><section>\n\n<p>Kiss</p>\n</section>"
144	if res != want {
145		t.Errorf("---\n%s\n--- want ---\n%s\n---", res, want)
146	}
147}