users_test.gno

2.30 Kb ยท 95 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	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}