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}