1package eventreg
2
3import (
4 "std"
5 "strings"
6 "testing"
7 "time"
8
9 "gno.land/p/demo/urequire"
10 "gno.land/p/zenao/events"
11 zenaov1 "gno.land/p/zenao/zenao/v1"
12)
13
14// XXX: Add tests for multiple organizers
15func TestEvents(t *testing.T) {
16 initialOwner := std.Address("g1djrkw9tf4px658j85cc6fhsvm50uf9s0g6kfsm") // zenao-dev-admin
17 std.TestSetRealm(std.NewUserRealm(initialOwner))
18
19 nextYearUnix := time.Now().Add(time.Hour * 24 * 365).Unix()
20 lastYearUnix := time.Now().Add(-time.Hour * 24 * 365).Unix()
21
22 // list no events
23 {
24 events := listEvents(time.Now().Unix(), nextYearUnix, 10, 0)
25 urequire.Equal(t, 0, len(events))
26 }
27
28 // inject evts
29 getters := map[string]events.InfoGetter{}
30 evts := []*struct {
31 id string
32 organizers []string
33 endDate time.Time
34 }{
35 {"gno.land/r/zenao/events/1-future-event-month", []string{"alice"}, time.Now().Add(30 * 24 * time.Hour)},
36 {"gno.land/r/zenao/events/2-future-event-day", []string{"bob"}, time.Now().Add(24 * time.Hour)},
37 {"gno.land/r/zenao/events/3-past-event-hour", []string{"alice"}, time.Now().Add(-time.Hour)},
38 {"gno.land/r/zenao/events/4-past-event-day", []string{"bob"}, time.Now().Add(-24 * time.Hour)},
39 {"gno.land/r/zenao/events/5-past-event-month", []string{"alice"}, time.Now().Add(-30 * 24 * time.Hour)},
40 {"gno.land/r/zenao/events/6-event-will-change", []string{"bob"}, time.Now().Add(-60 * 24 * time.Hour)},
41 }
42 for _, evt := range evts {
43 // XXX: `ev := evt` and using ev in place of evt will cause "gno.land/r/zenao/eventreg: test pkg: panic: unexpected type heapitem"
44 std.TestSetRealm(std.NewCodeRealm(evt.id))
45 getters[evt.id] = func() *zenaov1.EventInfo {
46 return &zenaov1.EventInfo{
47 Organizers: evt.organizers,
48 EndDate: evt.endDate.Unix(),
49 }
50 }
51 Register(getters[evt.id])
52 std.TestSetRealm(std.NewUserRealm(initialOwner))
53
54 IndexEvent(evt.id)
55 }
56
57 // list upcoming events
58 {
59 events := listEvents(time.Now().Unix(), nextYearUnix, 10, 0)
60 urequire.Equal(t, `2-future-event-day, 1-future-event-month`, eventsString(events), "future events list should match")
61 }
62 // list past events
63 {
64 events := listEvents(time.Now().Unix(), lastYearUnix, 10, 0)
65 urequire.Equal(t, `3-past-event-hour, 4-past-event-day, 5-past-event-month, 6-event-will-change`, eventsString(events))
66 }
67
68 // list events by organizer
69 {
70 // from future to past
71 events := listEventsByOrganizer("alice", nextYearUnix, lastYearUnix, 10, 0)
72 urequire.Equal(t, `1-future-event-month, 3-past-event-hour, 5-past-event-month`, eventsString(events))
73 }
74 {
75 // from past to future
76 events := listEventsByOrganizer("bob", lastYearUnix, nextYearUnix, 10, 0)
77 urequire.Equal(t, `6-event-will-change, 4-past-event-day, 2-future-event-day`, eventsString(events))
78 }
79 {
80 // none
81 events := listEventsByOrganizer("eve", lastYearUnix, nextYearUnix, 10, 0)
82 urequire.Equal(t, 0, len(events))
83 }
84
85 // inject participants
86 participants := []struct {
87 id string
88 eventIdxs []int
89 }{
90 {"eve", []int{0, 2, 4}},
91 {"carol", []int{1, 3, 5}},
92 }
93 for _, p := range participants {
94 for _, eventIdx := range p.eventIdxs {
95 evt := evts[eventIdx]
96 AddParticipant(evt.id, p.id)
97 }
98 }
99
100 // list events by participant
101 {
102 // from future to past
103 events := listEventsByParticipant("eve", nextYearUnix, lastYearUnix, 10, 0)
104 urequire.Equal(t, `1-future-event-month, 3-past-event-hour, 5-past-event-month`, eventsString(events))
105 }
106 {
107 // from past to future
108 events := listEventsByParticipant("carol", lastYearUnix, nextYearUnix, 10, 0)
109 urequire.Equal(t, `6-event-will-change, 4-past-event-day, 2-future-event-day`, eventsString(events))
110 }
111 {
112 // none
113 events := listEventsByParticipant("alice", lastYearUnix, nextYearUnix, 10, 0)
114 urequire.Equal(t, 0, len(events))
115 }
116
117 // chane event endDate and rerun all tests
118
119 evts[5].endDate = time.Now().Add(60 * 24 * time.Hour)
120 UpdateIndex(evts[5].id)
121
122 // list upcoming events
123 {
124 events := listEvents(time.Now().Unix(), nextYearUnix, 10, 0)
125 urequire.Equal(t, `2-future-event-day, 1-future-event-month, 6-event-will-change`, eventsString(events))
126 }
127 {
128 // list upcoming events with offset 1
129 events := listEvents(time.Now().Unix(), nextYearUnix, 10, 1)
130 urequire.Equal(t, `1-future-event-month, 6-event-will-change`, eventsString(events))
131 }
132 // list past events
133 {
134 events := listEvents(time.Now().Unix(), lastYearUnix, 10, 0)
135 urequire.Equal(t, `3-past-event-hour, 4-past-event-day, 5-past-event-month`, eventsString(events))
136 }
137 // list past events with offset 1 and limit 1
138 {
139 events := listEvents(time.Now().Unix(), lastYearUnix, 1, 1)
140 urequire.Equal(t, `4-past-event-day`, eventsString(events))
141 }
142 // list past event with offset 1
143 {
144 events := listEvents(time.Now().Unix(), lastYearUnix, 10, 1)
145 urequire.Equal(t, `4-past-event-day, 5-past-event-month`, eventsString(events))
146 }
147
148 // list events by organizer
149 {
150 // from future to past
151 events := listEventsByOrganizer("alice", nextYearUnix, lastYearUnix, 10, 0)
152 urequire.Equal(t, `1-future-event-month, 3-past-event-hour, 5-past-event-month`, eventsString(events))
153 }
154 {
155 // from past to future
156 events := listEventsByOrganizer("bob", lastYearUnix, nextYearUnix, 10, 0)
157 urequire.Equal(t, `4-past-event-day, 2-future-event-day, 6-event-will-change`, eventsString(events))
158 }
159
160 // list events by participant
161 {
162 // from future to past
163 events := listEventsByParticipant("eve", nextYearUnix, lastYearUnix, 10, 0)
164 urequire.Equal(t, `1-future-event-month, 3-past-event-hour, 5-past-event-month`, eventsString(events))
165 }
166 {
167 // from future to past with offset 2
168 events := listEventsByParticipant("eve", nextYearUnix, lastYearUnix, 10, 2)
169 urequire.Equal(t, `5-past-event-month`, eventsString(events))
170 }
171 {
172 // from past to future
173 events := listEventsByParticipant("carol", lastYearUnix, nextYearUnix, 10, 0)
174 urequire.Equal(t, `4-past-event-day, 2-future-event-day, 6-event-will-change`, eventsString(events))
175 }
176 {
177 // none
178 events := listEventsByParticipant("alice", lastYearUnix, nextYearUnix, 10, 0)
179 urequire.Equal(t, 0, len(events))
180 }
181
182 // chane event organizer and rerun all tests
183
184 evts[5].organizers = []string{"alice"}
185 UpdateIndex(evts[5].id)
186
187 // list upcoming events
188 {
189 events := listEvents(time.Now().Unix(), nextYearUnix, 10, 0)
190 urequire.Equal(t, `2-future-event-day, 1-future-event-month, 6-event-will-change`, eventsString(events))
191 }
192 // list past events
193 {
194 events := listEvents(time.Now().Unix(), lastYearUnix, 10, 0)
195 urequire.Equal(t, `3-past-event-hour, 4-past-event-day, 5-past-event-month`, eventsString(events))
196 }
197
198 // list events by organizer
199 {
200 // from future to past
201 events := listEventsByOrganizer("alice", nextYearUnix, lastYearUnix, 10, 0)
202 urequire.Equal(t, `6-event-will-change, 1-future-event-month, 3-past-event-hour, 5-past-event-month`, eventsString(events))
203 }
204 {
205 // from future to past with offset 2
206 events := listEventsByOrganizer("alice", nextYearUnix, lastYearUnix, 10, 2)
207 urequire.Equal(t, `3-past-event-hour, 5-past-event-month`, eventsString(events))
208 }
209 {
210 // from past to future
211 events := listEventsByOrganizer("bob", lastYearUnix, nextYearUnix, 10, 0)
212 urequire.Equal(t, `4-past-event-day, 2-future-event-day`, eventsString(events))
213 }
214 {
215 // from past to future with offset 2
216 events := listEventsByOrganizer("bob", lastYearUnix, nextYearUnix, 10, 2)
217 urequire.Equal(t, 0, len(events))
218 }
219
220 // list events by participant
221 {
222 // from future to past
223 events := listEventsByParticipant("eve", nextYearUnix, lastYearUnix, 10, 0)
224 urequire.Equal(t, `1-future-event-month, 3-past-event-hour, 5-past-event-month`, eventsString(events))
225 }
226 {
227 // from past to future
228 events := listEventsByParticipant("carol", lastYearUnix, nextYearUnix, 10, 0)
229 urequire.Equal(t, `4-past-event-day, 2-future-event-day, 6-event-will-change`, eventsString(events))
230 }
231 {
232 // none
233 events := listEventsByParticipant("alice", lastYearUnix, nextYearUnix, 10, 0)
234 urequire.Equal(t, 0, len(events))
235 }
236}
237
238func TestEventsToJSON(t *testing.T) {
239 evts := []*zenaov1.EventInfo{{
240 PkgPath: "foo",
241 Location: &zenaov1.EventLocation{Address: &zenaov1.AddressCustom{
242 Address: "Paris",
243 Timezone: "Europe/Paris",
244 }},
245 }}
246 urequire.Equal(t, `[{"location":{"custom":{"address":"Paris","timezone":"Europe/Paris"}},"pkgPath":"foo"}]`, eventsToJSON(evts))
247}
248
249func TestLocationToString(t *testing.T) {
250 loc := &zenaov1.EventLocation{Address: &zenaov1.AddressCustom{
251 Address: "Paris",
252 Timezone: "Europe/Paris",
253 }}
254 str, err := events.LocationString(loc)
255 urequire.NoError(t, err)
256 urequire.Equal(t, "Paris", str)
257}
258
259func eventsString(evts []*zenaov1.EventInfo) string {
260 res := []string{}
261 for _, evt := range evts {
262 res = append(res, strings.TrimPrefix(evt.PkgPath, "gno.land/r/zenao/events/"))
263 }
264 return strings.Join(res, ", ")
265}
eventreg_test.gno
8.60 Kb ยท 265 lines