flag_storage_test.gno
4.81 Kb · 235 lines
1package boards_test
2
3import (
4 "testing"
5
6 "gno.land/p/nt/urequire/v0"
7
8 "gno.land/p/gnoland/boards"
9)
10
11func TestFlagStorageExists(t *testing.T) {
12 tests := []struct {
13 name string
14 setup func() boards.FlagStorage
15 user address
16 exists bool
17 }{
18 {
19 name: "found",
20 setup: func() boards.FlagStorage {
21 s := boards.NewFlagStorage()
22 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
23 return s
24 },
25 user: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
26 exists: true,
27 },
28 {
29 name: "not found",
30 setup: func() boards.FlagStorage {
31 return boards.NewFlagStorage()
32 },
33 user: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
34 exists: false,
35 },
36 }
37
38 for _, tt := range tests {
39 t.Run(tt.name, func(t *testing.T) {
40 s := tt.setup()
41
42 urequire.Equal(t, tt.exists, s.Exists(tt.user))
43 })
44 }
45}
46
47func TestFlagStorageAdd(t *testing.T) {
48 tests := []struct {
49 name string
50 setup func() boards.FlagStorage
51 flag boards.Flag
52 errMsg string
53 }{
54 {
55 name: "ok",
56 setup: func() boards.FlagStorage {
57 return boards.NewFlagStorage()
58 },
59 flag: boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"},
60 },
61 {
62 name: "flag exists",
63 setup: func() boards.FlagStorage {
64 s := boards.NewFlagStorage()
65 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
66 return s
67 },
68 flag: boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"},
69 errMsg: "flag from user already exists: g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
70 },
71 {
72 name: "invalid user address",
73 setup: func() boards.FlagStorage {
74 return boards.NewFlagStorage()
75 },
76 flag: boards.Flag{User: "foo"},
77 errMsg: "post flagging error, invalid user address: foo",
78 },
79 }
80
81 for _, tt := range tests {
82 t.Run(tt.name, func(t *testing.T) {
83 s := tt.setup()
84
85 err := s.Add(tt.flag)
86
87 if tt.errMsg != "" {
88 urequire.Error(t, err, "expect an error")
89 urequire.ErrorContains(t, err, tt.errMsg, "expect error to match")
90 return
91 }
92
93 urequire.NoError(t, err, "expect no error")
94 urequire.True(t, s.Exists(tt.flag.User), "expect flag to be added")
95 })
96 }
97}
98
99func TestFlagStorageRemove(t *testing.T) {
100 tests := []struct {
101 name string
102 setup func() boards.FlagStorage
103 address address
104 removed bool
105 }{
106 {
107 name: "ok",
108 setup: func() boards.FlagStorage {
109 s := boards.NewFlagStorage()
110 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
111 return s
112 },
113 address: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
114 removed: true,
115 },
116 {
117 name: "not found",
118 setup: func() boards.FlagStorage {
119 return boards.NewFlagStorage()
120 },
121 address: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
122 },
123 }
124
125 for _, tt := range tests {
126 t.Run(tt.name, func(t *testing.T) {
127 s := tt.setup()
128
129 urequire.Equal(t, tt.removed, s.Remove(tt.address))
130 })
131 }
132}
133
134func TestFlagStorageSize(t *testing.T) {
135 tests := []struct {
136 name string
137 setup func() boards.FlagStorage
138 size int
139 }{
140 {
141 name: "empty",
142 setup: func() boards.FlagStorage {
143 return boards.NewFlagStorage()
144 },
145 size: 0,
146 },
147 {
148 name: "one flag",
149 setup: func() boards.FlagStorage {
150 s := boards.NewFlagStorage()
151 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
152 return s
153 },
154 size: 1,
155 },
156 {
157 name: "multiple flags",
158 setup: func() boards.FlagStorage {
159 s := boards.NewFlagStorage()
160 s.Add(boards.Flag{User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"})
161 s.Add(boards.Flag{User: "g16jpf0puufcpcjkph5nxueec8etpcldz7zwgydq"})
162 return s
163 },
164 size: 2,
165 },
166 }
167
168 for _, tt := range tests {
169 t.Run(tt.name, func(t *testing.T) {
170 s := tt.setup()
171
172 urequire.Equal(t, tt.size, s.Size())
173 })
174 }
175}
176
177func TestFlagStorageIterate(t *testing.T) {
178 flags := []boards.Flag{
179 {
180 User: "g16jpf0puufcpcjkph5nxueec8etpcldz7zwgydq",
181 Reason: "a",
182 },
183 {
184 User: "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5",
185 Reason: "b",
186 },
187 }
188 tests := []struct {
189 name string
190 setup func() boards.FlagStorage
191 reverse bool
192 flags []boards.Flag
193 }{
194 {
195 name: "default",
196 setup: func() boards.FlagStorage {
197 s := boards.NewFlagStorage()
198 s.Add(flags[0])
199 s.Add(flags[1])
200 return s
201 },
202 flags: flags,
203 },
204 {
205 name: "reverse",
206 setup: func() boards.FlagStorage {
207 s := boards.NewFlagStorage()
208 s.Add(flags[0])
209 s.Add(flags[1])
210 return s
211 },
212 reverse: true,
213 flags: []boards.Flag{flags[1], flags[0]},
214 },
215 }
216
217 for _, tt := range tests {
218 t.Run(tt.name, func(t *testing.T) {
219 s := tt.setup()
220 count := s.Size()
221 if tt.reverse {
222 count = -count
223 }
224
225 var i int
226 s.Iterate(0, count, func(f boards.Flag) bool {
227 urequire.Equal(t, tt.flags[i].User, f.User, "expect user to match")
228 urequire.Equal(t, tt.flags[i].Reason, f.Reason, "expect reason to match")
229
230 i++
231 return false
232 })
233 })
234 }
235}