@@ -46,6 +46,7 @@ import kotlinx.coroutines.tasks.await
4646import kotlinx.coroutines.test.advanceUntilIdle
4747import kotlinx.coroutines.test.runTest
4848import org.junit.Assert.assertEquals
49+ import org.junit.Assert.assertNull
4950import org.junit.Test
5051import org.junit.runner.RunWith
5152
@@ -242,6 +243,63 @@ class AppAttestationClientTest {
242243 assertEquals(" eyJhdHRlc3RhdGlvbklkIjoiMTIzNDU2IiwiYXR0ZXN0YXRpb25EYXRhIjoiWDE5VVJWTlVYMGxPVkVWSFVrbFVXVjlVVDB0RlRsOWYifQ==" , result)
243244 }
244245
246+ @OptIn(ExperimentalCoroutinesApi ::class )
247+ @Test
248+ fun appAttestationClient_createSalesforceOAuthAuthorizationAppAttestationThrowingUnknownException_returnsNull () = runTest {
249+
250+ val context = mockk<Context >(relaxed = true )
251+ val deviceId = " 123456"
252+ val googleCloudProjectId = 654321L
253+ val remoteAccessConsumerKey = " 13579"
254+ val restResponse = mockk<RestResponse >(relaxed = true )
255+ every { restResponse.asString() } returns " __TEST_CHALLENGE_VALUE__"
256+ every { restResponse.isSuccess } returns true
257+ val restClient = mockk<RestClient >(relaxed = true )
258+ every { restClient.sendSync(any()) } returns restResponse
259+
260+ val integrityToken = mockk<StandardIntegrityToken >(relaxed = true )
261+ every { integrityToken.token() } returns " __TEST_INTEGRITY_TOKEN__"
262+ val throwingIntegrityTokenTask = mockk<Task <StandardIntegrityToken >>(relaxed = true )
263+ every { throwingIntegrityTokenTask.addOnFailureListener(any()) } returns throwingIntegrityTokenTask
264+ every { throwingIntegrityTokenTask.getResult() } returns integrityToken
265+ mockkStatic(" kotlinx.coroutines.tasks.TasksKt" )
266+ coEvery { throwingIntegrityTokenTask.await() } throws RuntimeException (" Unknown Exception" )
267+ val throwingIntegrityTokenProvider = mockk<StandardIntegrityTokenProvider >(relaxed = true )
268+ every { throwingIntegrityTokenProvider.request(any()) } returns throwingIntegrityTokenTask
269+
270+ val successfulIntegrityTokenTask = mockk<Task <StandardIntegrityToken >>(relaxed = true )
271+ every { successfulIntegrityTokenTask.addOnFailureListener(any()) } returns successfulIntegrityTokenTask
272+ every { successfulIntegrityTokenTask.getResult() } returns integrityToken
273+ coEvery { successfulIntegrityTokenTask.await() } returns integrityToken
274+ val successfulIntegrityTokenProvider = mockk<StandardIntegrityTokenProvider >(relaxed = true )
275+ every { successfulIntegrityTokenProvider.request(any()) } returns successfulIntegrityTokenTask
276+
277+ val integrityTokenProviderTask = mockk<Task <StandardIntegrityTokenProvider >>(relaxed = true )
278+ every { integrityTokenProviderTask.addOnSuccessListener(any()) } returns integrityTokenProviderTask
279+ every { integrityTokenProviderTask.addOnFailureListener(any()) } returns integrityTokenProviderTask
280+ coEvery { integrityTokenProviderTask.result } returns successfulIntegrityTokenProvider
281+ val integrityManager = mockk<StandardIntegrityManager >(relaxed = true )
282+ every { integrityManager.prepareIntegrityToken(any()) } returns integrityTokenProviderTask
283+
284+ val appAttestationClient = AppAttestationClient (
285+ apiHostName = " login.example.com" ,
286+ context = context,
287+ deviceId = deviceId,
288+ googleCloudProjectId = googleCloudProjectId,
289+ remoteAccessConsumerKey = remoteAccessConsumerKey,
290+ restClient = restClient
291+ )
292+
293+ val result = appAttestationClient.createSalesforceOAuthAuthorizationAppAttestation(
294+ integrityManager = integrityManager,
295+ integrityTokenProvider = throwingIntegrityTokenProvider
296+ )
297+
298+ advanceUntilIdle()
299+
300+ assertNull(result)
301+ }
302+
245303
246304 @OptIn(ExperimentalCoroutinesApi ::class )
247305 @Test
0 commit comments