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}
profile_test.gno
3.63 Kb ยท 142 lines