diff --git a/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/ServiceAlertsViewModelTest.kt b/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/ServiceAlertsViewModelTest.kt new file mode 100644 index 00000000..db230bd4 --- /dev/null +++ b/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/ServiceAlertsViewModelTest.kt @@ -0,0 +1,83 @@ +package xyz.ksharma.core.test.viewmodels + +import app.cash.turbine.test +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import xyz.ksharma.core.test.fakes.FakeAnalytics +import xyz.ksharma.core.test.fakes.FakeSandook +import xyz.ksharma.core.test.helpers.AnalyticsTestHelper.assertAnalyticsEventTracked +import xyz.ksharma.krail.sandook.SelectServiceAlertsByJourneyId +import xyz.ksharma.krail.trip.planner.ui.alerts.ServiceAlertsViewModel +import xyz.ksharma.krail.trip.planner.ui.alerts.toServiceAlert +import xyz.ksharma.krail.trip.planner.ui.state.alerts.ServiceAlertState +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertEquals + +@OptIn(ExperimentalCoroutinesApi::class) +class ServiceAlertsViewModelTest { + + private val fakeAnalytics = FakeAnalytics() + private val fakeSandook = FakeSandook() + private lateinit var viewModel: ServiceAlertsViewModel + + private val testDispatcher = StandardTestDispatcher() + + @BeforeTest + fun setUp() { + Dispatchers.setMain(testDispatcher) + viewModel = ServiceAlertsViewModel( + analytics = fakeAnalytics, + sandook = fakeSandook + ) + } + + @AfterTest + fun tearDown() { + Dispatchers.resetMain() + } + + @Test + fun `GIVEN ServiceAlertsViewModel initial state WHEN uiState is collected THEN assert Initial State`() = + runTest { + viewModel.uiState.test { + awaitItem().run { + assertEquals(ServiceAlertState(), this) + } + + advanceUntilIdle() + assertAnalyticsEventTracked(fakeAnalytics, "view_screen", "ServiceAlerts") + + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `GIVEN journeyId WHEN fetchAlerts is called THEN alerts are returned`() = + runTest { + val journeyId = "testJourneyId" + val expectedAlerts = listOf( + SelectServiceAlertsByJourneyId( + heading = "Alert 1", + message = "Message 1", + journeyId = "1", + ), + SelectServiceAlertsByJourneyId( + heading = "Alert 2", + message = "Message 2", + journeyId = "2", + ) + ) + + fakeSandook.insertAlerts(journeyId, expectedAlerts) + + val alerts = viewModel.fetchAlerts(journeyId) + assertEquals(expectedAlerts.map { it.toServiceAlert() }, alerts) + } +} diff --git a/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/TimeTableViewModelTest.kt b/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/TimeTableViewModelTest.kt index 5773e4f0..500bb66d 100644 --- a/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/TimeTableViewModelTest.kt +++ b/core/test/src/commonTest/kotlin/xyz/ksharma/core/test/viewmodels/TimeTableViewModelTest.kt @@ -123,14 +123,6 @@ class TimeTableViewModelTest { // need to skip two items, because silentLoading will be toggled, as we manually call fetchTrip() skipItems(2) - /* - awaitItem().run { - assertTrue(silentLoading) - } - awaitItem().run { - assertFalse(silentLoading) - } - */ awaitItem().run { assertFalse(isLoading) diff --git a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/alerts/ServiceAlertsViewModel.kt b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/alerts/ServiceAlertsViewModel.kt index e2d4d2ae..64d81c2a 100644 --- a/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/alerts/ServiceAlertsViewModel.kt +++ b/feature/trip-planner/ui/src/commonMain/kotlin/xyz/ksharma/krail/trip/planner/ui/alerts/ServiceAlertsViewModel.kt @@ -35,7 +35,7 @@ class ServiceAlertsViewModel( } } -private fun SelectServiceAlertsByJourneyId.toServiceAlert() = ServiceAlert( +fun SelectServiceAlertsByJourneyId.toServiceAlert() = ServiceAlert( heading = heading, message = message, )