package wiki
import (
"strings"
"testing"
"gno.land/p/nt/uassert/v0"
)
func fixture(t *testing.T) (*Wiki, Ctx) {
t.Helper()
w := New(2, DefaultMaxBody)
edit(t, w, 1, alice, "Gno land", "A chain.\n\nSee [[Tendermint2]] and [[Absent page]].\n\n[[Category:Chains]]\n", "create")
edit(t, w, 2, bob, "Gno land", "A smart-contract chain.\n\nSee [[Tendermint2]].\n\n[[Category:Chains]]\n", "tighten")
edit(t, w, 3, alice, "Tendermint2", "The consensus engine.\n", "create")
return w, Ctx{Base: "/r/moul/x/wiki/v0", Exists: w.Exists}
}
func act(fn string, args ...string) string {
out := "/r/moul/x/wiki/v0$help&func=" + fn
for i := 0; i+1 < len(args); i += 2 {
out += "&" + args[i] + "=" + args[i+1]
}
return out
}
func TestRenderArticle(t *testing.T) {
w, c := fixture(t)
p, _ := w.Page("Gno land")
out := RenderArticle(c, w, p, act)
uassert.True(t, strings.Contains(out, "# Gno land"), "heading")
uassert.True(t, strings.Contains(out, "A smart-contract chain."), "body text")
uassert.True(t, strings.Contains(out, "[Tendermint2](/r/moul/x/wiki/v0:Tendermint2)"), "resolved wikilink")
uassert.False(t, strings.Contains(out, "[[Tendermint2]]"), "no raw wikilink survives")
uassert.True(t, strings.Contains(out, "**Categories:**"), "category footer")
uassert.True(t, strings.Contains(out, "[Chains](/r/moul/x/wiki/v0:Category:Chains)"), "category link")
uassert.True(t, strings.Contains(out, "func=Edit"), "edit action")
uassert.True(t, strings.Contains(out, "GNOT of storage deposit"), "cost is shown to the reader")
}
func TestRenderArticleWithoutActionsHasNoEditControls(t *testing.T) {
w, c := fixture(t)
p, _ := w.Page("Gno land")
out := RenderArticle(c, w, p, nil)
uassert.False(t, strings.Contains(out, "func=Edit"), "a nil Action renders a read-only page")
}
func TestRenderArticleEscapesHostileMarkdown(t *testing.T) {
w := New(2, DefaultMaxBody)
body := "\n\n# Fake realm heading\n"
edit(t, w, 1, alice, "Hostile", body, "")
p, _ := w.Page("Hostile")
out := RenderArticle(Ctx{Base: "/r/moul/x/wiki/v0"}, w, p, nil)
uassert.True(t, strings.Contains(out, `\