1package users
2
3import (
4 "std"
5 "testing"
6
7 "gno.land/p/demo/testutils"
8 "gno.land/p/demo/uassert"
9 "gno.land/p/demo/urequire"
10
11 susers "gno.land/r/sys/users"
12)
13
14var (
15 alice = "alice123"
16 bob = "bob123"
17 aliceAddr = testutils.TestAddress(alice)
18 bobAddr = testutils.TestAddress(bob)
19)
20
21func TestRegister_Valid(t *testing.T) {
22 std.TestSetOriginSend(std.NewCoins(std.NewCoin("ugnot", 1_000_000)), nil)
23 std.TestSetRealm(std.NewUserRealm(aliceAddr))
24 std.TestSetOriginCaller(aliceAddr)
25
26 uassert.NotPanics(t, func() {
27 Register(alice)
28 })
29
30 res, latest := susers.ResolveName(alice)
31
32 uassert.NotEqual(t, nil, res)
33 uassert.Equal(t, alice, res.Name())
34 uassert.Equal(t, aliceAddr, res.Addr())
35 uassert.False(t, res.IsDeleted())
36 uassert.True(t, latest)
37}
38
39func TestRegister_Invalid(t *testing.T) {
40 std.TestSetOriginSend(std.NewCoins(std.NewCoin("ugnot", 1_000_000)), nil)
41 std.TestSetRealm(std.NewUserRealm(bobAddr))
42 std.TestSetOriginCaller(bobAddr)
43
44 // Invalid usernames
45 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
46 Register("alice") // vanity
47 })
48
49 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
50 Register("") // empty
51 })
52
53 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
54 Register(" ") // empty
55 })
56
57 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
58 Register("123") // empty
59 })
60
61 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
62 Register("123") // only numbers
63 })
64
65 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
66 Register("alice&#($)") // non-allowed chars
67 })
68
69 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
70 Register("Alice123") // upper-case
71 })
72
73 uassert.PanicsWithMessage(t, ErrInvalidUsername.Error(), func() {
74 Register("toolongusernametoolongusernametoolongusername123") // too long
75 })
76
77 // Name taken
78 urequire.NotPanics(t, func() {
79 Register(bob)
80 })
81
82 uassert.PanicsWithMessage(t, susers.ErrNameTaken.Error(), func() {
83 Register(bob) // already registered
84 })
85}
86func TestRegister_InvalidPayment(t *testing.T) {
87 std.TestSetRealm(std.NewUserRealm(bobAddr))
88 std.TestSetOriginCaller(bobAddr)
89
90 std.TestSetOriginSend(std.NewCoins(std.NewCoin("ugnot", 12)), nil) // invalid payment amount
91
92 uassert.PanicsWithMessage(t, ErrInvalidPayment.Error(), func() {
93 Register(alice)
94 })
95}
users_test.gno
2.30 Kb ยท 95 lines