Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}