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}