[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:
1 file changed
+49
+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()) }
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user