Search Apps Documentation Source Content File Folder Download Copy Actions Download

grc20reg_test.gno

2.96 Kb · 98 lines
 1package grc20reg
 2
 3import (
 4	"strings"
 5	"testing"
 6
 7	"gno.land/p/demo/tokens/grc20"
 8	"gno.land/p/nt/urequire/v0"
 9)
10
11func TestRegistry(cur realm, t *testing.T) {
12	testing.SetRealm(testing.NewCodeRealm("gno.land/r/demo/foo"))
13	realmAddr := cur.PkgPath()
14	token, ledger := grc20.NewToken(0, cur, "TestToken", "TST", 4)
15	ledger.Mint(cur.Address(), 1234567)
16	// register
17	Register(cross(cur), token, "")
18	regToken := Get(realmAddr)
19	urequire.True(t, regToken != nil, "expected to find a token") // fixme: use urequire.NotNil
20	urequire.Equal(t, regToken.GetSymbol(), "TST")
21
22	expected := `- **TestToken** - [gno.land/r/demo/foo](/r/demo/foo) - [info](/r/demo/grc20reg:gno.land/r/demo/foo)
23`
24	got := Render("")
25	urequire.True(t, strings.Contains(got, expected))
26	// 404
27	invalidToken := Get("0xdeadbeef")
28	urequire.True(t, invalidToken == nil)
29
30	// register with a slug
31	Register(cross(cur), token, "mySlug")
32	regToken = Get(realmAddr + ".mySlug")
33	urequire.True(t, regToken != nil, "expected to find a token") // fixme: use urequire.NotNil
34	urequire.Equal(t, regToken.GetSymbol(), "TST")
35
36	// override
37	Register(cross(cur), token, "")
38	regToken = Get(realmAddr + "")
39	urequire.True(t, regToken != nil, "expected to find a token") // fixme: use urequire.NotNil
40	urequire.Equal(t, regToken.GetSymbol(), "TST")
41
42	got = Render("")
43	urequire.True(t, strings.Contains(got, `- **TestToken** - [gno.land/r/demo/foo](/r/demo/foo) - [info](/r/demo/grc20reg:gno.land/r/demo/foo)`))
44	urequire.True(t, strings.Contains(got, `- **TestToken** - [gno.land/r/demo/foo](/r/demo/foo).mySlug - [info](/r/demo/grc20reg:gno.land/r/demo/foo.mySlug)`))
45
46	expected = `# TestToken
47- symbol: **TST**
48- realm: [gno.land/r/demo/foo](/r/demo/foo).mySlug
49- decimals: 4
50- total supply: 1234567
51`
52	got = Render("gno.land/r/demo/foo.mySlug")
53	urequire.Equal(t, expected, got)
54}
55
56func TestValidateSlug(cur realm, t *testing.T) {
57	// Valid slugs — should not panic
58	valid := []string{"mytoken", "my-token", "my_token", "Token123", "a", "A-B_c"}
59	for _, slug := range valid {
60		validateSlug(slug) // no panic = pass
61	}
62}
63
64func TestValidateSlugPanicsOnSpace(cur realm, t *testing.T) {
65	defer func() { recover() }()
66	validateSlug("has space")
67	t.Errorf("should have panicked")
68}
69
70func TestValidateSlugPanicsOnDot(cur realm, t *testing.T) {
71	defer func() { recover() }()
72	validateSlug("has.dot")
73	t.Errorf("should have panicked")
74}
75
76func TestValidateSlugPanicsOnSlash(cur realm, t *testing.T) {
77	defer func() { recover() }()
78	validateSlug("has/slash")
79	t.Errorf("should have panicked")
80}
81
82func TestValidateSlugPanicsOnBrackets(cur realm, t *testing.T) {
83	defer func() { recover() }()
84	validateSlug("[brackets]")
85	t.Errorf("should have panicked")
86}
87
88func TestValidateSlugPanicsOnParens(cur realm, t *testing.T) {
89	defer func() { recover() }()
90	validateSlug("(parens)")
91	t.Errorf("should have panicked")
92}
93
94func TestValidateSlugPanicsOnInjection(cur realm, t *testing.T) {
95	defer func() { recover() }()
96	validateSlug(`) [Claim](https://evil.com`)
97	t.Errorf("should have panicked")
98}