Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

render_test.gno

3.48 Kb · 77 lines
 1package item
 2
 3import (
 4	"strings"
 5	"testing"
 6
 7	"gno.land/p/nt/uassert/v0"
 8)
 9
10func TestRenderHomeAndOwner(cur realm, t *testing.T) {
11	setupItemTest(cross(cur), t)
12
13	home := Render("")
14	uassert.True(t, strings.Contains(home, `<gno-form path="owner">`), "should render the owner lookup form")
15	uassert.True(t, strings.Contains(home, `name="address"`), "should render the address input")
16
17	empty := Render("owner?address=" + itemTest.Owner.String())
18	uassert.True(t, strings.Contains(empty, itemTest.Owner.String()), "should render the owner address")
19	uassert.True(t, strings.Contains(empty, "Total**: 0"), "should render an empty total")
20	uassert.True(t, strings.Contains(empty, "No items held"), "should render an empty holding list")
21
22	testing.SetOriginCaller(itemTest.Operator)
23	testing.SetRealm(testing.NewUserRealm(itemTest.Operator))
24	SafeMint(cross(cur), itemTest.Owner, "test-iron", 3)
25	SafeMint(cross(cur), itemTest.Owner, "**x**", 2)
26
27	listed := Render("owner?address=" + itemTest.Owner.String())
28	uassert.True(t, strings.Contains(listed, "Total**: 2"), "should render the owned token count")
29	uassert.True(t, strings.Contains(listed, "test\\-iron"), "should escape item token ids")
30	uassert.True(t, strings.Contains(listed, "**: 3"), "should render item amounts")
31	uassert.True(t, strings.Contains(listed, `\*\*x\*\*`), "escaped markdown token id should be visible")
32	uassert.False(t, strings.Contains(listed, "**x**"), "raw markdown token id should not remain")
33}
34
35func TestRenderOwnerPagesWhenCountExceedsLimit(cur realm, t *testing.T) {
36	setupItemTest(cross(cur), t)
37	testing.SetOriginCaller(itemTest.Admin)
38	testing.SetRealm(testing.NewUserRealm(itemTest.Admin))
39	SetListLimit(cross(cur), 1)
40
41	testing.SetOriginCaller(itemTest.Operator)
42	testing.SetRealm(testing.NewUserRealm(itemTest.Operator))
43	SafeMint(cross(cur), itemTest.Owner, "10", 1)
44	SafeMint(cross(cur), itemTest.Owner, "20", 1)
45
46	page1 := Render("owner?address=" + itemTest.Owner.String())
47	uassert.True(t, strings.Contains(page1, "Total**: 2"), "should render total holdings")
48	uassert.True(t, strings.Contains(page1, "**10**"), "page 1 should include the first token")
49	uassert.False(t, strings.Contains(page1, "**20**"), "page 1 should not include the second token")
50	uassert.True(t, strings.Contains(page1, "page 1 of 2"), "should render a page picker")
51	uassert.True(t, strings.Contains(page1, "page=2"), "should link to the next page")
52
53	page2 := Render("owner?address=" + itemTest.Owner.String() + "&page=2")
54	uassert.True(t, strings.Contains(page2, "**20**"), "page 2 should include the second token")
55	uassert.False(t, strings.Contains(page2, "**10**"), "page 2 should not include the first token")
56	uassert.True(t, strings.Contains(page2, "page 2 of 2"), "should render the last page picker")
57
58	invalidPage := Render("owner?address=" + itemTest.Owner.String() + "&page=3")
59	uassert.True(t, strings.Contains(invalidPage, "Invalid page"), "should reject a page past the last page")
60}
61
62func TestRenderErrors(cur realm, t *testing.T) {
63	setupItemTest(cross(cur), t)
64
65	invalid := Render("owner?address=invalid-address")
66	uassert.True(t, strings.Contains(invalid, "Invalid address"), "should reject an invalid address")
67
68	unknown := Render("unknown")
69	uassert.True(t, strings.Contains(unknown, "Not found"), "should reject an unknown route")
70}
71
72func TestRenderRejectsOversizedURL(cur realm, t *testing.T) {
73	uassert.PanicsWithMessage(t, cur, "url exceeds max runes", func() {
74		Render(strings.Repeat("a", renderURLMaxRunes+1))
75	})
76	Render(strings.Repeat("a", renderURLMaxRunes))
77}