[Add edge case tests for DashboardSessionTokenRefresher] (#694)

* Add edge case testing for DashboardSessionTokenRefresher

Added tests to `DashboardSessionTokenRefresherTest.kt` to cover
cases where `refresh()` catches exceptions or where `fetch()`
returns null. Included a happy-path test for `refresh()`.

* Add edge case testing for DashboardSessionTokenRefresher

Added tests to `DashboardSessionTokenRefresherTest.kt` to cover
cases where `refresh()` catches exceptions or where `fetch()`
returns null. Included a happy-path test for `refresh()`.
This commit is contained in:
M57 authored and GitHub committed 2026-07-23 13:15:23 +03:00
1 parent d3836ace7f
commit 1dd59efaab
1 file changed
+49
@@ -1,5 +1,10 @@
package com.m57.hermescontrol.data.remote
import com.m57.hermescontrol.data.local.AuthManager
import io.mockk.every
import io.mockk.mockkObject
import io.mockk.unmockkAll
import io.mockk.verify
import okhttp3.OkHttpClient
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
@@ -16,11 +21,14 @@ class DashboardSessionTokenRefresherTest {
fun setUp() {
server = MockWebServer()
server.start()
mockkObject(OkHttpProvider)
every { OkHttpProvider.probe } returns OkHttpClient()
}
@AfterEach
fun tearDown() {
server.shutdown()
unmockkAll()
}
@Test
@@ -67,4 +75,45 @@ class DashboardSessionTokenRefresherTest {
assertNull(token)
}
@Test
fun refreshUpdatesAuthManagerOnSuccess() {
mockkObject(AuthManager)
every { AuthManager.baseUrl() } returns server.url("/").toString()
every { AuthManager.setToken(any()) } returns Unit
server.enqueue(
MockResponse()
.setResponseCode(200)
.setBody("""<script>window.__HERMES_SESSION_TOKEN__ = "mocked-token";</script>"""),
)
val token = DashboardSessionTokenRefresher.refresh()
assertEquals("mocked-token", token)
verify { AuthManager.setToken("mocked-token") }
}
@Test
fun refreshReturnsNullOnException() {
mockkObject(AuthManager)
every { AuthManager.baseUrl() } throws RuntimeException("Network Error")
val token = DashboardSessionTokenRefresher.refresh()
assertNull(token)
}
@Test
fun refreshReturnsNullWhenFetchReturnsNull() {
mockkObject(AuthManager)
every { AuthManager.baseUrl() } returns server.url("/").toString()
// No token returned from fetch
server.enqueue(MockResponse().setResponseCode(200).setBody("<html></html>"))
val token = DashboardSessionTokenRefresher.refresh()
assertNull(token)
verify(exactly = 0) { AuthManager.setToken(any()) }
}
}