package home
import (
"chain/runtime"
"encoding/base64"
"net/url"
"strconv"
"strings"
"testing"
"gno.land/p/nt/avl/v0"
"gno.land/p/nt/testutils/v0"
"gno.land/p/nt/uassert/v0"
)
// A guess arrives in the page link, so anyone can write one: none of it may
// reach the rendered markdown.
func TestGuessIsNeverEchoed(t *testing.T) {
setDay(launchDay)
uassert.True(t, strings.Contains(Render("wordle/1?guess=abc"), "> That guess is not five letters, A to Z."))
for _, guess := range []string{
"[claim your reward](https://evil.example)",
"x\n\n# OFFICIAL NOTICE",
"",
``,
} {
// Any rejected guess renders the very page a harmless rejected one does.
page := Render("wordle/1?guess=" + url.QueryEscape(guess))
uassert.Equal(t, Render("wordle/1?guess=abc"), page, "guess leaked into the page: "+guess)
}
}
func TestOnlyAdminWrites(cur realm, t *testing.T) {
for _, caller := range []runtime.Realm{
testing.NewUserRealm(testutils.TestAddress("mallory")),
testing.NewCodeRealm("gno.land/r/evil/relay"),
} {
testing.SetRealm(caller)
uassert.AbortsWithMessage(t, cur, "unauthorized", func() { Set(cross(cur), "header", "pwned") })
uassert.AbortsWithMessage(t, cur, "unauthorized", func() { Delete(cross(cur), "header") })
}
uassert.False(t, strings.Contains(Render(""), "pwned"))
}
func TestChartTextIsEscaped(cur realm, t *testing.T) {
testing.SetRealm(testing.NewUserRealm(admin))
old := Get(reviewActivitySlot)
Set(cross(cur), reviewActivitySlot, `title reviews; series ,a&b; 2026-01 1 2`)
out := renderChart(reviewActivitySlot)
raw, err := base64.StdEncoding.DecodeString(out[strings.Index(out, "base64,")+7 : len(out)-2])
uassert.NoError(t, err)
uassert.False(t, strings.Contains(string(raw), "