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, `\