Skip to content

Commit 836cffb

Browse files
committed
Fix login error state test in CI
1 parent f0c1b87 commit 836cffb

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
- uses: actions/checkout@v4
1313
- uses: actions/setup-java@v4
1414
with:
15-
java-version: '17'
15+
java-version: '21'
1616
distribution: 'temurin'
1717
- uses: actions/cache@v4
1818
with:

shared/src/androidUnitTest/kotlin/com/mobileprism/fishing/viewmodels/LoginViewModelTest.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package com.mobileprism.fishing.viewmodels
22

33
import com.mobileprism.fishing.domain.entity.common.User
44
import com.mobileprism.fishing.domain.repository.UserRepository
5+
import com.mobileprism.fishing.domain.repository.app.AnalyticsEvent
56
import com.mobileprism.fishing.domain.repository.app.AnalyticsTracker
67
import com.mobileprism.fishing.testutils.user
78
import com.mobileprism.fishing.ui.viewmodels.LoginUiState
89
import com.mobileprism.fishing.ui.viewmodels.LoginViewModel
10+
import io.mockk.every
911
import io.mockk.mockk
12+
import io.mockk.verify
1013
import kotlinx.coroutines.Dispatchers
1114
import kotlinx.coroutines.ExperimentalCoroutinesApi
1215
import 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)

shared/src/commonMain/kotlin/com/mobileprism/fishing/ui/viewmodels/LoginViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ class LoginViewModel(
7272
}
7373

7474
private fun onSignInError(error: Throwable) {
75-
analyticsTracker.logEvent(AnalyticsEvent.SignInError(error.message))
76-
Cedar.e(error.message ?: "Sign-in failed")
7775
_uiState.value = LoginUiState.Error(error.message)
76+
runCatching { analyticsTracker.logEvent(AnalyticsEvent.SignInError(error.message)) }
77+
runCatching { Cedar.e(error.message ?: "Sign-in failed") }
7878
}
7979
}

0 commit comments

Comments
 (0)