Search Apps Documentation Source Content File Folder Download Copy Actions Download

grc20reg_test.gno

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