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