eventreg_test.gno

7.30 Kb ยท 234 lines
  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}