test(#519): add AuthLoginViewModel probe error-path tests (merge onto #517 file, JUnit4+deterministic) (#519)

This commit is contained in:
M57 authored and GitHub committed 2026-07-09 21:36:57 +03:00
1 parent ba2d4cf896
commit 350db20af6
1 file changed
+43
@@ -1,19 +1,26 @@
package com.m57.hermescontrol.ui.authlogin
import android.app.Application
import android.util.Log
import com.m57.hermescontrol.R
import com.m57.hermescontrol.data.local.AuthManager
import com.m57.hermescontrol.data.remote.OkHttpProvider
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkObject
import io.mockk.mockkStatic
import io.mockk.unmockkAll
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import okhttp3.OkHttpClient
import okhttp3.Response
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Before
import org.junit.Test
import java.io.IOException
class AuthLoginViewModelTest {
private lateinit var viewModel: AuthLoginViewModel
@@ -29,6 +36,12 @@ class AuthLoginViewModelTest {
mockkObject(OkHttpProvider)
every { OkHttpProvider.probe } returns mockk<OkHttpClient>(relaxed = true)
mockkStatic(Log::class)
every { Log.w(any<String>(), any<String>()) } returns 0
every { Log.d(any<String>(), any<String>()) } returns 0
every { app.getString(R.string.auth_login_error_unreachable) } returns "Dashboard unreachable"
viewModel = AuthLoginViewModel(app)
}
@@ -66,4 +79,34 @@ class AuthLoginViewModelTest {
assertFalse(state.isLoading)
assertNull(state.errorMessage)
}
@Test
fun `probe when status probe throws IOException updates error state`() {
val mockCall = mockk<okhttp3.Call>()
every { OkHttpProvider.probe.newCall(any()) } returns mockCall
every { mockCall.execute() } throws IOException("Connection refused")
viewModel.probe()
val state = runBlocking { viewModel.uiState.first { !it.probing } }
assertFalse(state.probing)
assertNull(state.authMode)
assertEquals("Dashboard unreachable", state.errorMessage)
}
@Test
fun `probe when status probe returns unsuccessful updates error state`() {
val mockCall = mockk<okhttp3.Call>()
val mockResponse = mockk<Response>()
every { OkHttpProvider.probe.newCall(any()) } returns mockCall
every { mockCall.execute() } returns mockResponse
every { mockResponse.isSuccessful } returns false
viewModel.probe()
val state = runBlocking { viewModel.uiState.first { !it.probing } }
assertFalse(state.probing)
assertNull(state.authMode)
assertEquals("Dashboard unreachable", state.errorMessage)
}
}