@@ -2,11 +2,14 @@ package com.mobileprism.fishing.viewmodels
22
33import com.mobileprism.fishing.domain.entity.common.User
44import com.mobileprism.fishing.domain.repository.UserRepository
5+ import com.mobileprism.fishing.domain.repository.app.AnalyticsEvent
56import com.mobileprism.fishing.domain.repository.app.AnalyticsTracker
67import com.mobileprism.fishing.testutils.user
78import com.mobileprism.fishing.ui.viewmodels.LoginUiState
89import com.mobileprism.fishing.ui.viewmodels.LoginViewModel
10+ import io.mockk.every
911import io.mockk.mockk
12+ import io.mockk.verify
1013import kotlinx.coroutines.Dispatchers
1114import kotlinx.coroutines.ExperimentalCoroutinesApi
1215import kotlinx.coroutines.flow.Flow
@@ -85,6 +88,21 @@ class LoginViewModelTest {
8588 val viewModel = LoginViewModel (repo, analyticsTracker)
8689 advanceUntilIdle()
8790
91+ val state = viewModel.uiState.value
92+ assertIs<LoginUiState .Error >(state)
93+ assertEquals(" boom" , state.message)
94+ verify(exactly = 1 ) { analyticsTracker.logEvent(AnalyticsEvent .SignInError (" boom" )) }
95+ }
96+
97+ @Test
98+ fun `observeCurrentUser keeps Error state when analytics logging throws` () = runTest {
99+ every { analyticsTracker.logEvent(any()) } throws RuntimeException (" analytics failed" )
100+ val repo = fakeUserRepository(
101+ currentUserFlow = flow { throw RuntimeException (" boom" ) }
102+ )
103+ val viewModel = LoginViewModel (repo, analyticsTracker)
104+ advanceUntilIdle()
105+
88106 val state = viewModel.uiState.value
89107 assertIs<LoginUiState .Error >(state)
90108 assertEquals(" boom" , state.message)
0 commit comments