@@ -9,13 +9,13 @@ import com.caplin.datasource.messaging.CachedMessageFactory
99import com.caplin.datasource.messaging.container.ContainerMessage
1010import com.caplin.datasource.messaging.json.JsonMessage
1111import com.caplin.datasource.messaging.record.GenericMessage
12- import com.caplin.datasource.namespace.RegexNamespace
1312import com.caplin.datasource.publisher.CachingDataProvider
1413import com.caplin.datasource.publisher.CachingPublisher
1514import com.caplin.integration.datasourcex.reactive.api.ContainerEvent
1615import com.caplin.integration.datasourcex.reactive.api.ContainerEvent.RowEvent.Remove
1716import com.caplin.integration.datasourcex.reactive.api.ContainerEvent.RowEvent.Upsert
1817import com.caplin.integration.datasourcex.reactive.api.InsertAt.HEAD
18+ import com.caplin.integration.datasourcex.util.AntPatternNamespace
1919import com.caplin.integration.datasourcex.util.flow.ValueOrCompletion
2020import com.caplin.integration.datasourcex.util.flow.ValueOrCompletion.Completion
2121import com.caplin.integration.datasourcex.util.flow.ValueOrCompletion.Value
@@ -37,6 +37,7 @@ import io.mockk.verifyOrder
3737import java.time.Duration
3838import java.util.concurrent.ConcurrentHashMap
3939import kotlin.properties.ReadOnlyProperty
40+ import kotlin.time.Duration.Companion.milliseconds
4041import kotlinx.coroutines.ExperimentalCoroutinesApi
4142import kotlinx.coroutines.delay
4243import kotlinx.coroutines.flow.Flow
@@ -82,7 +83,9 @@ class BindTest :
8283
8384 val dataSource =
8485 mockk<DataSource > {
85- every { createCachingPublisher(any<RegexNamespace >(), capture(dataProviders)) } answers
86+ every {
87+ createCachingPublisher(any<AntPatternNamespace >(), capture(dataProviders))
88+ } answers
8689 {
8790 secondArg<CachingDataProvider >().setPublisher(cachingPublisher)
8891 cachingPublisher
@@ -134,11 +137,11 @@ class BindTest :
134137
135138 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
136139
137- delay(10 )
140+ delay(10 .milliseconds )
138141
139142 verify(exactly = 0 ) { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
140143
141- delay(1 )
144+ delay(1 .milliseconds )
142145
143146 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
144147
@@ -161,21 +164,21 @@ class BindTest :
161164
162165 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
163166
164- delay(1 )
167+ delay(1 .milliseconds )
165168 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
166169 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
167170
168171 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf (" 1" to " a" , " 2" to " b" )))
169172
170- delay(50 )
173+ delay(50 .milliseconds )
171174
172175 sharedFlow.emitUpdate(Upsert (key = " 2" , value = mapOf (" 1" to " x" , " 2" to " y" )))
173176
174177 verify(exactly = 0 ) { cachingPublisher.publish(any()) }
175- delay(50 )
178+ delay(50 .milliseconds )
176179
177180 verify(exactly = 0 ) { cachingPublisher.publish(any()) }
178- delay(51 )
181+ delay(51 .milliseconds )
179182
180183 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
181184 containerMessages.last().also { containerMessage ->
@@ -187,7 +190,7 @@ class BindTest :
187190 }
188191
189192 dataProviderCaptor.onRequest(" /SUBJECT/1-items/1" )
190- delay(1 )
193+ delay(1 .milliseconds )
191194
192195 verify { cachedMessageFactory.createGenericMessage(" /SUBJECT/1-items/1" ) }
193196 genericMessages.last().also { genericMessage ->
@@ -199,7 +202,7 @@ class BindTest :
199202 }
200203
201204 dataProviderCaptor.onRequest(" /SUBJECT/1-items/2" )
202- delay(1 )
205+ delay(1 .milliseconds )
203206
204207 verify { cachedMessageFactory.createGenericMessage(" /SUBJECT/1-items/2" ) }
205208 genericMessages.last().also { genericMessage ->
@@ -212,11 +215,11 @@ class BindTest :
212215
213216 sharedFlow.emitUpdate(Remove (key = " 2" ))
214217
215- delay(50 )
218+ delay(50 .milliseconds )
216219
217220 sharedFlow.emitUpdate(Upsert (key = " 3" , value = mapOf (" 1" to " l" , " 2" to " m" )))
218221
219- delay(101 )
222+ delay(101 .milliseconds )
220223
221224 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
222225 containerMessages.last().also { containerMessage ->
@@ -228,7 +231,7 @@ class BindTest :
228231 }
229232
230233 dataProviderCaptor.onRequest(" /SUBJECT/1-items/3" )
231- delay(1 )
234+ delay(1 .milliseconds )
232235
233236 verify { cachedMessageFactory.createGenericMessage(" /SUBJECT/1-items/3" ) }
234237 genericMessages.last().also { genericMessage ->
@@ -259,18 +262,18 @@ class BindTest :
259262 }
260263
261264 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
262- delay(1 )
265+ delay(1 .milliseconds )
263266
264267 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
265268 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
266269
267270 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
268271
269- delay(50 )
272+ delay(50 .milliseconds )
270273
271274 sharedFlow.emitUpdate(Upsert (key = " 2" , value = mapOf ()))
272275
273- delay(101 )
276+ delay(101 .milliseconds )
274277
275278 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
276279 containerMessages.last().also { containerMessage ->
@@ -282,7 +285,7 @@ class BindTest :
282285 }
283286
284287 containerDataProviderCaptor.onDiscard(" /SUBJECT/1" )
285- delay(1 )
288+ delay(1 .milliseconds )
286289 }
287290
288291 test(" Generic Container - Re-request" ) {
@@ -299,18 +302,18 @@ class BindTest :
299302 }
300303
301304 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
302- delay(1 )
305+ delay(1 .milliseconds )
303306
304307 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
305308 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
306309
307310 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
308311
309- delay(50 )
312+ delay(50 .milliseconds )
310313
311314 sharedFlow.emitUpdate(Upsert (key = " 2" , value = mapOf ()))
312315
313- delay(101 )
316+ delay(101 .milliseconds )
314317
315318 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
316319 containerMessages.last().also { containerMessage ->
@@ -322,23 +325,23 @@ class BindTest :
322325 }
323326
324327 containerDataProviderCaptor.onDiscard(" /SUBJECT/1" )
325- delay(1 )
328+ delay(1 .milliseconds )
326329
327330 // Resubscribe
328331
329332 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
330- delay(1 )
333+ delay(1 .milliseconds )
331334
332335 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
333336 val sharedFlow2 = requestedContainerSubjects.getValue(" /SUBJECT/1" )
334337
335338 sharedFlow2.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
336339
337- delay(50 )
340+ delay(50 .milliseconds )
338341
339342 sharedFlow2.emitUpdate(Upsert (key = " 2" , value = mapOf ()))
340343
341- delay(101 )
344+ delay(101 .milliseconds )
342345
343346 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
344347
@@ -351,7 +354,7 @@ class BindTest :
351354 }
352355
353356 containerDataProviderCaptor.onDiscard(" /SUBJECT/1" )
354- delay(1 )
357+ delay(1 .milliseconds )
355358 }
356359
357360 test(" Generic Container - Upsert and remove quicker than debounce" ) {
@@ -362,27 +365,27 @@ class BindTest :
362365 }
363366
364367 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
365- delay(1 )
368+ delay(1 .milliseconds )
366369
367370 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
368371 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
369372
370373 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
371- delay(50 )
374+ delay(50 .milliseconds )
372375
373376 sharedFlow.emitUpdate(Remove (key = " 1" ))
374- delay(100 )
377+ delay(100 .milliseconds )
375378
376379 verify(exactly = 0 ) { cachingPublisher.publish(any()) }
377380
378381 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
379- delay(50 )
382+ delay(50 .milliseconds )
380383
381384 sharedFlow.emitUpdate(Upsert (key = " 2" , value = mapOf ()))
382- delay(50 )
385+ delay(50 .milliseconds )
383386
384387 sharedFlow.emitUpdate(Remove (key = " 1" ))
385- delay(101 )
388+ delay(101 .milliseconds )
386389
387390 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
388391 containerMessages.last().also { containerMessage ->
@@ -393,15 +396,15 @@ class BindTest :
393396 }
394397
395398 dataProviderCaptor.onRequest(" /SUBJECT/1-items/2" )
396- delay(1 )
399+ delay(1 .milliseconds )
397400 verify { cachedMessageFactory.createGenericMessage(" /SUBJECT/1-items/2" ) }
398401 genericMessages.last().also { genericMessage ->
399402 verify { cachingPublisher.publish(genericMessage) }
400403 }
401404
402405 containerDataProviderCaptor.onDiscard(" /SUBJECT/1" )
403406 dataProviderCaptor.onDiscard(" /SUBJECT/1-items/2" )
404- delay(1 )
407+ delay(1 .milliseconds )
405408
406409 confirmVerified(cachedMessageFactory)
407410 }
@@ -414,23 +417,23 @@ class BindTest :
414417 }
415418
416419 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
417- delay(1 )
420+ delay(1 .milliseconds )
418421
419422 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
420423 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
421424
422425 sharedFlow.subscriptionCount.value shouldNotBeEqual 0
423426
424427 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
425- delay(50 )
428+ delay(50 .milliseconds )
426429
427430 dataProviderCaptor.onRequest(" /SUBJECT/1-items/1" )
428- delay(1 )
431+ delay(1 .milliseconds )
429432
430433 sharedFlow.subscriptionCount.value shouldNotBeEqual 0
431434
432435 sharedFlow.emit(Completion (IllegalStateException ()))
433- delay(1 )
436+ delay(1 .milliseconds )
434437
435438 sharedFlow.subscriptionCount.value shouldBeEqual 0
436439
@@ -450,23 +453,23 @@ class BindTest :
450453 }
451454
452455 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
453- delay(1 )
456+ delay(1 .milliseconds )
454457
455458 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
456459 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
457460
458461 sharedFlow.subscriptionCount.value shouldNotBeEqual 0
459462
460463 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
461- delay(50 )
464+ delay(50 .milliseconds )
462465
463466 dataProviderCaptor.onRequest(" /SUBJECT/1-items/1" )
464- delay(1 )
467+ delay(1 .milliseconds )
465468
466469 sharedFlow.subscriptionCount.value shouldNotBeEqual 0
467470
468471 sharedFlow.emit(Completion ())
469- delay(1 )
472+ delay(1 .milliseconds )
470473
471474 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
472475 verify { cachedMessageFactory.createGenericMessage(" /SUBJECT/1-items/1" ) }
@@ -489,7 +492,7 @@ class BindTest :
489492 }
490493
491494 dataProviderCaptor.onRequest(" /SUBJECT/1-items/1" )
492- delay(1 )
495+ delay(1 .milliseconds )
493496
494497 verify { cachedMessageFactory.createSubjectErrorEvent(" /SUBJECT/1-items/1" , NotFound ) }
495498 subjectErrorEvents.last().also { subjectErrorEvent ->
@@ -505,32 +508,32 @@ class BindTest :
505508 }
506509
507510 containerDataProviderCaptor.onRequest(" /SUBJECT/1" )
508- delay(1 )
511+ delay(1 .milliseconds )
509512
510513 requestedContainerSubjects.keys shouldContain " /SUBJECT/1"
511514 val sharedFlow = requestedContainerSubjects.getValue(" /SUBJECT/1" )
512515
513516 sharedFlow.subscriptionCount.value shouldNotBeEqual 0
514517
515518 sharedFlow.emitUpdate(Upsert (key = " 1" , value = mapOf ()))
516- delay(101 )
519+ delay(101 .milliseconds )
517520
518521 verify { cachedMessageFactory.createContainerMessage(" /SUBJECT/1" ) }
519522
520523 dataProviderCaptor.onRequest(" /SUBJECT/1-items/2" )
521- delay(9000 )
524+ delay(9000 .milliseconds )
522525 verify(exactly = 0 ) {
523526 cachedMessageFactory.createSubjectErrorEvent(" /SUBJECT/1-items/2" , NotFound )
524527 }
525- delay(1001 )
528+ delay(1001 .milliseconds )
526529
527530 verify { cachedMessageFactory.createSubjectErrorEvent(" /SUBJECT/1-items/2" , NotFound ) }
528531 subjectErrorEvents.last().also { subjectErrorEvent ->
529532 verify { cachingPublisher.publishSubjectErrorEvent(subjectErrorEvent) }
530533 }
531534
532535 containerDataProviderCaptor.onDiscard(" /SUBJECT/1" )
533- delay(1 )
536+ delay(1 .milliseconds )
534537
535538 confirmVerified(cachedMessageFactory)
536539 }
@@ -543,7 +546,7 @@ class BindTest :
543546 requestedGenericSubjects.keys shouldNotContain " /SUBJECT/1"
544547
545548 dataProviderCaptor.onRequest(" /SUBJECT/1" )
546- delay(1 )
549+ delay(1 .milliseconds )
547550
548551 requestedGenericSubjects.keys shouldContain " /SUBJECT/1"
549552
@@ -591,7 +594,7 @@ class BindTest :
591594 requestedGenericSubjects.keys shouldNotContain " /SUBJECT/1"
592595
593596 dataProviderCaptor.onRequest(" /SUBJECT/1" )
594- delay(1 )
597+ delay(1 .milliseconds )
595598
596599 requestedGenericSubjects.keys shouldContain " /SUBJECT/1"
597600
@@ -627,7 +630,7 @@ class BindTest :
627630
628631 requestedJsonSubjects.keys shouldNotContain " /SUBJECT/1"
629632 dataProviderCaptor.onRequest(" /SUBJECT/1" )
630- delay(1 )
633+ delay(1 .milliseconds )
631634 requestedJsonSubjects.keys shouldContain " /SUBJECT/1"
632635
633636 val sharedFlow = requestedJsonSubjects.getValue(" /SUBJECT/1" )
0 commit comments