profile_test.gno

3.63 Kb ยท 142 lines
  1package profile
  2
  3import (
  4	"std"
  5	"testing"
  6
  7	"gno.land/p/demo/testutils"
  8	"gno.land/p/demo/uassert"
  9)
 10
 11// Global addresses for test users
 12var (
 13	alice   = testutils.TestAddress("alice")
 14	bob     = testutils.TestAddress("bob")
 15	charlie = testutils.TestAddress("charlie")
 16	dave    = testutils.TestAddress("dave")
 17	eve     = testutils.TestAddress("eve")
 18	frank   = testutils.TestAddress("frank")
 19	user1   = testutils.TestAddress("user1")
 20	user2   = testutils.TestAddress("user2")
 21)
 22
 23func TestStringFields(t *testing.T) {
 24	std.TestSetRealm(std.NewUserRealm(alice))
 25
 26	// Get before setting
 27	name := GetStringField(alice, DisplayName, "anon")
 28	uassert.Equal(t, "anon", name)
 29
 30	// Set new key
 31	updated := SetStringField(DisplayName, "Alice foo")
 32	uassert.Equal(t, updated, false)
 33	updated = SetStringField(Homepage, "https://example.com")
 34	uassert.Equal(t, updated, false)
 35
 36	// Update the key
 37	updated = SetStringField(DisplayName, "Alice foo")
 38	uassert.Equal(t, updated, true)
 39
 40	// Get after setting
 41	name = GetStringField(alice, DisplayName, "anon")
 42	homepage := GetStringField(alice, Homepage, "")
 43	bio := GetStringField(alice, Bio, "42")
 44
 45	uassert.Equal(t, "Alice foo", name)
 46	uassert.Equal(t, "https://example.com", homepage)
 47	uassert.Equal(t, "42", bio)
 48}
 49
 50func TestIntFields(t *testing.T) {
 51	std.TestSetRealm(std.NewUserRealm(bob))
 52
 53	// Get before setting
 54	age := GetIntField(bob, Age, 25)
 55	uassert.Equal(t, 25, age)
 56
 57	// Set new key
 58	updated := SetIntField(Age, 30)
 59	uassert.Equal(t, updated, false)
 60
 61	// Update the key
 62	updated = SetIntField(Age, 30)
 63	uassert.Equal(t, updated, true)
 64
 65	// Get after setting
 66	age = GetIntField(bob, Age, 25)
 67	uassert.Equal(t, 30, age)
 68}
 69
 70func TestBoolFields(t *testing.T) {
 71	std.TestSetRealm(std.NewUserRealm(charlie))
 72
 73	// Get before setting
 74	hiring := GetBoolField(charlie, AvailableForHiring, false)
 75	uassert.Equal(t, false, hiring)
 76
 77	// Set
 78	updated := SetBoolField(AvailableForHiring, true)
 79	uassert.Equal(t, updated, false)
 80
 81	// Update the key
 82	updated = SetBoolField(AvailableForHiring, true)
 83	uassert.Equal(t, updated, true)
 84
 85	// Get after setting
 86	hiring = GetBoolField(charlie, AvailableForHiring, false)
 87	uassert.Equal(t, true, hiring)
 88}
 89
 90func TestMultipleProfiles(t *testing.T) {
 91	// Set profile for user1
 92	std.TestSetRealm(std.NewUserRealm(user1))
 93	updated := SetStringField(DisplayName, "User One")
 94	uassert.Equal(t, updated, false)
 95
 96	// Set profile for user2
 97	std.TestSetRealm(std.NewUserRealm(user2))
 98	updated = SetStringField(DisplayName, "User Two")
 99	uassert.Equal(t, updated, false)
100
101	// Get profiles
102	std.TestSetRealm(std.NewUserRealm(user1)) // Switch back to user1
103	name1 := GetStringField(user1, DisplayName, "anon")
104	std.TestSetRealm(std.NewUserRealm(user2)) // Switch back to user2
105	name2 := GetStringField(user2, DisplayName, "anon")
106
107	uassert.Equal(t, "User One", name1)
108	uassert.Equal(t, "User Two", name2)
109}
110
111func TestArbitraryStringField(t *testing.T) {
112	std.TestSetRealm(std.NewUserRealm(user1))
113
114	// Set arbitrary string field
115	updated := SetStringField("MyEmail", "my@email.com")
116	uassert.Equal(t, updated, false)
117
118	val := GetStringField(user1, "MyEmail", "")
119	uassert.Equal(t, val, "my@email.com")
120}
121
122func TestArbitraryIntField(t *testing.T) {
123	std.TestSetRealm(std.NewUserRealm(user1))
124
125	// Set arbitrary int field
126	updated := SetIntField("MyIncome", 100_000)
127	uassert.Equal(t, updated, false)
128
129	val := GetIntField(user1, "MyIncome", 0)
130	uassert.Equal(t, val, 100_000)
131}
132
133func TestArbitraryBoolField(t *testing.T) {
134	std.TestSetRealm(std.NewUserRealm(user1))
135
136	// Set arbitrary int field
137	updated := SetBoolField("IsWinner", true)
138	uassert.Equal(t, updated, false)
139
140	val := GetBoolField(user1, "IsWinner", false)
141	uassert.Equal(t, val, true)
142}