users_test.gno
2.71 Kb ยท 101 lines
1package users
2
3import (
4 "chain"
5 "testing"
6
7 "gno.land/p/nt/testutils"
8 "gno.land/p/nt/uassert"
9 "gno.land/p/nt/urequire"
10
11 susers "gno.land/r/sys/users"
12)
13
14func TestRegister_Valid(t *testing.T) {
15 validUsernames := []string{
16 "abc123", // letters + digits
17 "abc123_def456", // mix of letters / digits / underscore
18 "abc_defghi_jklmn123", // 19 chars
19 "abc_defghi_jklmno456", // 20 chars (max)
20 }
21
22 for _, username := range validUsernames {
23 addr := testutils.TestAddress(username)
24
25 // Simulate a proper user call with the required 1GNOT fee.
26 testing.SetRealm(testing.NewUserRealm(addr))
27 testing.SetOriginCaller(addr)
28 testing.SetOriginSend(chain.NewCoins(chain.NewCoin("ugnot", registerPrice)))
29
30 urequire.NotPanics(t, func() {
31 Register(cross, username)
32 })
33 }
34}
35
36func TestRegister_Free(t *testing.T) {
37 registerPrice = 0
38
39 addr := testutils.TestAddress("alice456")
40
41 // Simulate a proper user call with 0gnot fee.
42 testing.SetRealm(testing.NewUserRealm(addr))
43 testing.SetOriginCaller(addr)
44
45 urequire.NotPanics(t, func() {
46 Register(cross, "alice456")
47 })
48}
49
50func TestRegister_Invalid(t *testing.T) {
51 t.Run("invalid usernames", func(t *testing.T) {
52 testing.SetOriginSend(chain.NewCoins(chain.NewCoin("ugnot", registerPrice)))
53 testing.SetRealm(testing.NewUserRealm(testutils.TestAddress("bob123")))
54
55 invalidUsernames := []string{
56 "alice", // vanity
57 "", // empty
58 " ", // empty
59 "123", // only numbers (no letters)
60 "abc", // only letters (no numbers)
61 "alice&#($)123", // invalid characters
62 "Alice123", // uppercase
63 "abcdefghijklmnopqr123", // 21 chars (> max)
64 "toolongusernametoolongusernametoolongusername123", // super long
65 }
66
67 for _, username := range invalidUsernames {
68 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
69 Register(cross, username)
70 })
71 }
72 })
73
74 t.Run("taken username", func(t *testing.T) {
75 testing.SetOriginSend(chain.NewCoins(chain.NewCoin("ugnot", registerPrice)))
76 testing.SetRealm(testing.NewUserRealm(testutils.TestAddress("bob123")))
77
78 username := "bob123"
79
80 urequire.NotPanics(t, func() {
81 Register(cross, username)
82 })
83
84 uassert.AbortsWithMessage(t, susers.ErrNameTaken.Error(), func() {
85 Register(cross, username) // already registered
86 })
87 })
88
89 t.Run("invalid payment", func(t *testing.T) {
90 addr := testutils.TestAddress("bob123")
91
92 testing.SetRealm(testing.NewUserRealm(addr))
93 testing.SetOriginCaller(addr)
94
95 testing.SetOriginSend(chain.NewCoins(chain.NewCoin("ugnot", 12))) // invalid payment amount
96
97 uassert.AbortsWithMessage(t, ErrInvalidPayment.Error(), func() {
98 Register(cross, "alice123")
99 })
100 })
101}