users_test.gno
2.53 Kb ยท 107 lines
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 testing.SetOriginSend(std.NewCoins(std.NewCoin("ugnot", 1_000_000)))
23 testing.SetRealm(std.NewUserRealm(aliceAddr))
24
25 uassert.NotPanics(t, func() {
26 cross(Register)(alice)
27 })
28
29 res, latest := susers.ResolveName(alice)
30 uassert.True(t, latest)
31 uassert.NotTypedNil(t, res)
32 if !istypednil(res) {
33 uassert.Equal(t, alice, res.Name())
34 uassert.Equal(t, aliceAddr, res.Addr())
35 uassert.False(t, res.IsDeleted())
36 }
37}
38
39func TestRegister_Invalid(t *testing.T) {
40 testing.SetOriginSend(std.NewCoins(std.NewCoin("ugnot", 1_000_000)))
41 testing.SetRealm(std.NewUserRealm(bobAddr))
42
43 // Invalid usernames
44 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
45 cross(Register)("alice") // vanity
46 })
47
48 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
49 cross(Register)("") // empty
50 })
51
52 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
53 cross(Register)(" ") // empty
54 })
55
56 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
57 cross(Register)("123") // empty
58 })
59
60 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
61 cross(Register)("123") // only numbers
62 })
63
64 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
65 cross(Register)("alice&#($)") // non-allowed chars
66 })
67
68 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
69 cross(Register)("Alice123") // upper-case
70 })
71
72 uassert.AbortsWithMessage(t, ErrInvalidUsername.Error(), func() {
73 cross(Register)("toolongusernametoolongusernametoolongusername123") // too long
74 })
75
76 // Name taken
77 urequire.NotPanics(t, func() {
78 cross(Register)(bob)
79 })
80
81 uassert.AbortsWithMessage(t, susers.ErrNameTaken.Error(), func() {
82 cross(Register)(bob) // already registered
83 })
84}
85
86func TestRegister_InvalidPayment(t *testing.T) {
87 testing.SetRealm(std.NewUserRealm(bobAddr))
88 testing.SetOriginCaller(bobAddr)
89
90 testing.SetOriginSend(std.NewCoins(std.NewCoin("ugnot", 12))) // invalid payment amount
91
92 uassert.AbortsWithMessage(t, ErrInvalidPayment.Error(), func() {
93 cross(Register)(alice)
94 })
95}
96
97/* TODO fix this @moul
98func TestUsers(t *testing.T) {
99 acc1 := std.Address("g1test1")
100 fee := "1000ugnot"
101
102 // Check initial state
103 uassert.NotPanics(t, func() {
104 MustGetByName(susers.DefaultMinFee)
105 })
106}
107*/