@@ -5,10 +5,12 @@ import (
5
5
"testing"
6
6
"time"
7
7
8
+ "github.com/google/uuid"
8
9
"github.com/modernice/goes/event"
9
10
"github.com/modernice/goes/event/eventbus"
10
11
"github.com/modernice/goes/event/eventstore"
11
12
"github.com/modernice/goes/event/handler"
13
+ "github.com/modernice/goes/event/query"
12
14
"github.com/modernice/goes/event/test"
13
15
)
14
16
@@ -57,13 +59,13 @@ func TestHandler(t *testing.T) {
57
59
}
58
60
}
59
61
60
- func TestWithStore (t * testing.T ) {
62
+ func TestStartup (t * testing.T ) {
61
63
ctx , cancel := context .WithCancel (context .Background ())
62
64
defer cancel ()
63
65
64
66
bus := eventbus .New ()
65
67
store := eventstore .New ()
66
- h := handler .New (bus , handler .WithStore (store ))
68
+ h := handler .New (bus , handler .Startup (store ))
67
69
68
70
fooHandled := make (chan event.Of [test.FooEventData ])
69
71
barHandled := make (chan event.Of [test.BarEventData ])
@@ -102,3 +104,172 @@ func TestWithStore(t *testing.T) {
102
104
case <- barHandled :
103
105
}
104
106
}
107
+
108
+ func TestStartupQuery (t * testing.T ) {
109
+ bus := eventbus .New ()
110
+ store := eventstore .New ()
111
+
112
+ h := handler .New (bus , handler .Startup (store ), handler .StartupQuery (func (event.Query ) event.Query {
113
+ return query .New (query .Name ("bar" ))
114
+ }))
115
+
116
+ fooHandled := make (chan event.Of [test.FooEventData ])
117
+ barHandled := make (chan event.Of [test.BarEventData ])
118
+
119
+ h .RegisterEventHandler ("foo" , func (evt event.Event ) { fooHandled <- event.Cast [test.FooEventData ](evt ) })
120
+ h .RegisterEventHandler ("bar" , func (evt event.Event ) { barHandled <- event.Cast [test.BarEventData ](evt ) })
121
+
122
+ if err := store .Insert (
123
+ context .Background (),
124
+ event .New ("foo" , test.FooEventData {}).Any (),
125
+ event .New ("bar" , test.BarEventData {}).Any (),
126
+ ); err != nil {
127
+ t .Fatalf ("Insert() failed with %q" , err )
128
+ }
129
+
130
+ errs , err := h .Run (context .Background ())
131
+ if err != nil {
132
+ t .Fatalf ("Run() failed with %q" , err )
133
+ }
134
+
135
+ go func () {
136
+ for err := range errs {
137
+ panic (err )
138
+ }
139
+ }()
140
+
141
+ select {
142
+ case <- time .After (time .Second ):
143
+ t .Fatalf ("bar event was not handled" )
144
+ case <- barHandled :
145
+ }
146
+
147
+ select {
148
+ case <- time .After (50 * time .Millisecond ):
149
+ case <- fooHandled :
150
+ t .Fatalf ("foo event was handled" )
151
+ }
152
+ }
153
+
154
+ func TestStartup_withQuery_merges_names (t * testing.T ) {
155
+ bus := eventbus .New ()
156
+ store := eventstore .New ()
157
+
158
+ testID := uuid .New ()
159
+
160
+ h := handler .New (bus , handler .Startup (store , query .Name ("bar" )))
161
+
162
+ fooHandled := make (chan event.Of [test.FooEventData ])
163
+ barHandled := make (chan event.Of [test.BarEventData ])
164
+
165
+ h .RegisterEventHandler ("foo" , func (evt event.Event ) {
166
+ t .Log ("Handling foo event" )
167
+ fooHandled <- event.Cast [test.FooEventData ](evt )
168
+ })
169
+ h .RegisterEventHandler ("bar" , func (evt event.Event ) {
170
+ t .Log ("Handling bar event" )
171
+ barHandled <- event.Cast [test.BarEventData ](evt )
172
+ })
173
+
174
+ t1 := time .Now ().Add (time .Minute )
175
+ t2 := t1 .Add (time .Second )
176
+
177
+ if err := store .Insert (
178
+ context .Background (),
179
+ event .New ("foo" , test.FooEventData {}).Any (),
180
+ event .New ("bar" , test.BarEventData {}, event .Time (t2 )).Any (),
181
+ event .New ("bar" , test.BarEventData {}, event .Time (t1 ), event .ID (testID )).Any (),
182
+ ); err != nil {
183
+ t .Fatalf ("Insert() failed with %q" , err )
184
+ }
185
+
186
+ errs , err := h .Run (context .Background ())
187
+ if err != nil {
188
+ t .Fatalf ("Run() failed with %q" , err )
189
+ }
190
+
191
+ go func () {
192
+ for err := range errs {
193
+ panic (err )
194
+ }
195
+ }()
196
+
197
+ select {
198
+ case <- time .After (time .Second ):
199
+ t .Fatalf ("foo event was not handled" )
200
+ case <- fooHandled :
201
+ }
202
+
203
+ select {
204
+ case <- time .After (time .Second ):
205
+ t .Fatalf ("bar event was not handled #1" )
206
+ case evt := <- barHandled :
207
+ if evt .ID () != testID {
208
+ t .Fatalf ("expected event ID %q; got %q" , testID , evt .ID ())
209
+ }
210
+ }
211
+
212
+ select {
213
+ case <- time .After (time .Second ):
214
+ t .Fatalf ("bar event was not handled #2" )
215
+ case evt := <- barHandled :
216
+ if evt .ID () == testID {
217
+ t .Fatalf ("expected event ID not to be %q; got %q" , testID , evt .ID ())
218
+ }
219
+ }
220
+ }
221
+
222
+ func TestStartup_withQuery_merges_ids (t * testing.T ) {
223
+ bus := eventbus .New ()
224
+ store := eventstore .New ()
225
+
226
+ testID := uuid .New ()
227
+
228
+ h := handler .New (bus , handler .Startup (store , query .ID (testID )))
229
+
230
+ fooHandled := make (chan event.Of [test.FooEventData ])
231
+ barHandled := make (chan event.Of [test.BarEventData ])
232
+
233
+ h .RegisterEventHandler ("foo" , func (evt event.Event ) {
234
+ t .Log ("Handling foo event" )
235
+ fooHandled <- event.Cast [test.FooEventData ](evt )
236
+ })
237
+ h .RegisterEventHandler ("bar" , func (evt event.Event ) {
238
+ t .Log ("Handling bar event" )
239
+ barHandled <- event.Cast [test.BarEventData ](evt )
240
+ })
241
+
242
+ if err := store .Insert (
243
+ context .Background (),
244
+ event .New ("foo" , test.FooEventData {}).Any (),
245
+ event .New ("bar" , test.BarEventData {}, event .ID (testID )).Any (),
246
+ ); err != nil {
247
+ t .Fatalf ("Insert() failed with %q" , err )
248
+ }
249
+
250
+ errs , err := h .Run (context .Background ())
251
+ if err != nil {
252
+ t .Fatalf ("Run() failed with %q" , err )
253
+ }
254
+
255
+ go func () {
256
+ for err := range errs {
257
+ panic (err )
258
+ }
259
+ }()
260
+
261
+ select {
262
+ case <- time .After (50 * time .Millisecond ):
263
+ case <- fooHandled :
264
+ t .Fatalf ("foo event was handled" )
265
+ }
266
+
267
+ select {
268
+ case <- time .After (time .Second ):
269
+ t .Fatalf ("bar event was not handled" )
270
+ case evt := <- barHandled :
271
+ if evt .ID () != testID {
272
+ t .Fatalf ("expected event ID %q; got %q" , testID , evt .ID ())
273
+ }
274
+ }
275
+ }
0 commit comments