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