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*/