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.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}