@@ -64,6 +64,8 @@ import kotlinx.coroutines.flow.Flow
6464import kotlinx.coroutines.flow.first
6565import kotlinx.coroutines.flow.firstOrNull
6666import kotlinx.coroutines.flow.flow
67+ import kotlinx.coroutines.flow.toList
68+ import kotlinx.coroutines.launch
6769import kotlinx.coroutines.test.TestCoroutineDispatcher
6870import org.hamcrest.MatcherAssert.assertThat
6971import org.hamcrest.core.Is.`is`
@@ -359,6 +361,69 @@ class ScheduleViewModelTest {
359361 )
360362 }
361363
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+
362427 private fun createScheduleViewModel (
363428 loadScheduleSessionsUseCase : LoadScheduleUserSessionsUseCase =
364429 createTestLoadUserSessionsByDayUseCase(),
0 commit comments