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

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

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}