@@ -64,6 +64,8 @@ import kotlinx.coroutines.flow.Flow
64
64
import kotlinx.coroutines.flow.first
65
65
import kotlinx.coroutines.flow.firstOrNull
66
66
import kotlinx.coroutines.flow.flow
67
+ import kotlinx.coroutines.flow.toList
68
+ import kotlinx.coroutines.launch
67
69
import kotlinx.coroutines.test.TestCoroutineDispatcher
68
70
import org.hamcrest.MatcherAssert.assertThat
69
71
import org.hamcrest.core.Is.`is`
@@ -359,6 +361,69 @@ class ScheduleViewModelTest {
359
361
)
360
362
}
361
363
364
+ @Test
365
+ fun scrollToEvent_beforeconference () {
366
+ scrollToEvent_beforeConference(dayIndex = 0 , targetPosition = 0 )
367
+ }
368
+
369
+ @Test
370
+ fun scrollToEvent_beforeConference_clickOnSecondDay () {
371
+ scrollToEvent_beforeConference(dayIndex = 1 , targetPosition = 2 )
372
+ }
373
+
374
+ private fun scrollToEvent_beforeConference (dayIndex : Int , targetPosition : Int ) =
375
+ coroutineRule.runBlockingTest {
376
+ val viewModel = createScheduleViewModel()
377
+
378
+ // Start observing
379
+ viewModel.scheduleUiData.first()
380
+
381
+ // Trigger to generate indexer
382
+ viewModel.scrollToStartOfDay(TestData .TestConferenceDays [0 ])
383
+
384
+ val result = mutableListOf<ScheduleScrollEvent >()
385
+ val job = launch {
386
+ viewModel.scrollToEvent.toList(result)
387
+ }
388
+
389
+ // Trigger to generate a result in scrollToEvent
390
+ viewModel.scrollToStartOfDay(TestData .TestConferenceDays [dayIndex])
391
+
392
+ assertTrue(result.size == 1 )
393
+ assertEquals(
394
+ result[0 ],
395
+ ScheduleScrollEvent (targetPosition = targetPosition, smoothScroll = false )
396
+ )
397
+
398
+ job.cancel()
399
+ }
400
+
401
+ @Test
402
+ fun scrollToEvent_beforeConference_userHasInteracted () = coroutineRule.runBlockingTest {
403
+ val viewModel = createScheduleViewModel()
404
+
405
+ viewModel.userHasInteracted = true
406
+
407
+ // Start observing
408
+ viewModel.scheduleUiData.first()
409
+
410
+ // Trigger to generate indexer
411
+ viewModel.scrollToStartOfDay(TestData .TestConferenceDays [0 ])
412
+
413
+ val result = mutableListOf<ScheduleScrollEvent >()
414
+ val job = launch {
415
+ viewModel.scrollToEvent.toList(result)
416
+ }
417
+
418
+ // Trigger to generate a result in scrollToEvent
419
+ viewModel.scrollToStartOfDay(TestData .TestConferenceDays [1 ])
420
+
421
+ assertTrue(result.size == 1 )
422
+ assertEquals(result[0 ], ScheduleScrollEvent (targetPosition = 2 , smoothScroll = false ))
423
+
424
+ job.cancel()
425
+ }
426
+
362
427
private fun createScheduleViewModel (
363
428
loadScheduleSessionsUseCase : LoadScheduleUserSessionsUseCase =
364
429
createTestLoadUserSessionsByDayUseCase(),
0 commit comments