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