diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt index c4abca4b5e1..58753d2f033 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/data/remote/shared/TokenAuthenticator.kt @@ -169,6 +169,8 @@ constructor( Result.failure(unknownHostException) } catch (sslHandShakeException: SSLHandshakeException) { Result.failure(sslHandShakeException) + } catch (e: Exception) { + Result.failure(e) } } diff --git a/android/engine/src/test/java/org/smartregister/fhircore/engine/auth/TokenAuthenticatorTest.kt b/android/engine/src/test/java/org/smartregister/fhircore/engine/auth/TokenAuthenticatorTest.kt index 35a3bcc4039..a460edb293b 100644 --- a/android/engine/src/test/java/org/smartregister/fhircore/engine/auth/TokenAuthenticatorTest.kt +++ b/android/engine/src/test/java/org/smartregister/fhircore/engine/auth/TokenAuthenticatorTest.kt @@ -268,35 +268,27 @@ class TokenAuthenticatorTest : RobolectricTest() { @Test @ExperimentalCoroutinesApi - fun testFetchTokenShouldShouldCatchHttpAndUnknownHostAndSSLHandshakeExceptions() { + fun testFetchAccessTokenShouldCatchAllNetworkExceptions() { val username = sampleUsername val password = charArrayOf('P', '4', '5', '5', 'W', '4', '0') - val httpException = HttpException(Response.success(null)) - - coEvery { oAuthService.fetchToken(any()) }.throws(httpException) - - runTest { - var result = tokenAuthenticator.fetchAccessToken(username, password) - Assert.assertEquals(Result.failure(httpException), result) - } - - val unknownHostException = UnknownHostException() - - coEvery { oAuthService.fetchToken(any()) }.throws(unknownHostException) - - runTest { - var result = tokenAuthenticator.fetchAccessToken(username, password) - Assert.assertEquals(Result.failure(unknownHostException), result) - } - - val sslHandshakeException = SSLHandshakeException("reason") + // Test with various exception types to verify generic exception handling + val exceptions = + listOf( + HttpException(Response.error(401, mockk(relaxed = true))), + UnknownHostException(), + SSLHandshakeException("SSL error"), + IOException("IO error"), + ) - coEvery { oAuthService.fetchToken(any()) }.throws(sslHandshakeException) + exceptions.forEach { exception -> + coEvery { oAuthService.fetchToken(any()) }.throws(exception) - runTest { - var result = tokenAuthenticator.fetchAccessToken(username, password) - Assert.assertEquals(Result.failure(sslHandshakeException), result) + runTest { + val result = tokenAuthenticator.fetchAccessToken(username, password) + Assert.assertTrue(result.isFailure) + Assert.assertEquals(exception, result.exceptionOrNull()) + } } }