@@ -4,7 +4,6 @@ import android.app.Activity
44import android.content.Context
55import android.content.Intent
66import android.net.Uri
7- import android.os.Looper
87import android.os.Parcelable
98import androidx.test.espresso.intent.matcher.IntentMatchers
109import androidx.test.espresso.intent.matcher.UriMatchers
@@ -28,6 +27,7 @@ import com.auth0.android.request.internal.ThreadSwitcherShadow
2827import com.auth0.android.result.Credentials
2928import com.auth0.android.util.AuthenticationAPIMockServer
3029import com.auth0.android.util.SSLTestUtils
30+ import org.mockito.kotlin.*
3131import kotlinx.coroutines.Dispatchers
3232import kotlinx.coroutines.ExperimentalCoroutinesApi
3333import kotlinx.coroutines.launch
@@ -53,25 +53,15 @@ import org.mockito.Mock
5353import org.mockito.Mockito
5454import org.mockito.Mockito.`when`
5555import org.mockito.MockitoAnnotations
56- import org.mockito.kotlin.KArgumentCaptor
57- import org.mockito.kotlin.any
58- import org.mockito.kotlin.argumentCaptor
59- import org.mockito.kotlin.doThrow
60- import org.mockito.kotlin.eq
61- import org.mockito.kotlin.mock
62- import org.mockito.kotlin.never
63- import org.mockito.kotlin.verify
6456import org.robolectric.Robolectric
6557import org.robolectric.RobolectricTestRunner
66- import org.robolectric.Shadows.shadowOf
6758import org.robolectric.annotation.Config
6859import org.robolectric.shadows.ShadowLooper
6960import java.io.ByteArrayInputStream
7061import java.io.InputStream
7162import java.nio.file.Files
7263import java.nio.file.Paths
73- import java.util.Collections
74- import java.util.Date
64+ import java.util.*
7565
7666@RunWith(RobolectricTestRunner ::class )
7767@Config(shadows = [ThreadSwitcherShadow ::class ])
@@ -1551,11 +1541,22 @@ public class WebAuthProviderTest {
15511541 public fun shouldFailToResumeLoginWhenRSAKeyIsMissingFromJWKSet () {
15521542 val pkce = Mockito .mock(PKCE ::class .java)
15531543 `when `(pkce.codeChallenge).thenReturn(" challenge" )
1554- val mockAPI = AuthenticationAPIMockServer ()
1555- mockAPI.willReturnEmptyJsonWebKeys()
1544+ val networkingClient: NetworkingClient = Mockito .spy(DefaultClient ())
15561545 val authCallback = mock<Callback <Credentials , AuthenticationException >>()
1557- val proxyAccount: Auth0 = Auth0 .getInstance(JwtTestUtils .EXPECTED_AUDIENCE , mockAPI.domain)
1558- proxyAccount.networkingClient = SSLTestUtils .testClient
1546+ val proxyAccount: Auth0 = Auth0 .getInstance(JwtTestUtils .EXPECTED_AUDIENCE , JwtTestUtils .EXPECTED_BASE_DOMAIN )
1547+ proxyAccount.networkingClient = networkingClient
1548+
1549+ // Stub JWKS response with empty keys
1550+ val emptyJwksJson = """ {
1551+ "keys": []
1552+ }"""
1553+ val jwksInputStream: InputStream = ByteArrayInputStream (emptyJwksJson.toByteArray())
1554+ val jwksResponse = ServerResponse (200 , jwksInputStream, emptyMap())
1555+ Mockito .doReturn(jwksResponse).`when `(networkingClient).load(
1556+ eq(proxyAccount.getDomainUrl() + " .well-known/jwks.json" ),
1557+ any()
1558+ )
1559+
15591560 login(proxyAccount)
15601561 .withState(" 1234567890" )
15611562 .withNonce(JwtTestUtils .EXPECTED_NONCE )
@@ -1590,9 +1591,9 @@ public class WebAuthProviderTest {
15901591 )
15911592 Mockito .doAnswer {
15921593 callbackCaptor.firstValue.onSuccess(codeCredentials)
1594+ null
15931595 }.`when `(pkce).getToken(eq(" 1234" ), callbackCaptor.capture())
15941596 Assert .assertTrue(resume(intent))
1595- mockAPI.takeRequest()
15961597 ShadowLooper .idleMainLooper()
15971598 verify(authCallback).onFailure(authExceptionCaptor.capture())
15981599 val error = authExceptionCaptor.firstValue
@@ -1608,7 +1609,6 @@ public class WebAuthProviderTest {
16081609 error.cause?.message,
16091610 `is `(" Could not find a public key for kid \" key123\" " )
16101611 )
1611- mockAPI.shutdown()
16121612 }
16131613
16141614 @Test
@@ -1682,11 +1682,20 @@ public class WebAuthProviderTest {
16821682 public fun shouldFailToResumeLoginWhenKeyIdIsMissingFromIdTokenHeader () {
16831683 val pkce = Mockito .mock(PKCE ::class .java)
16841684 `when `(pkce.codeChallenge).thenReturn(" challenge" )
1685- val mockAPI = AuthenticationAPIMockServer ()
1686- mockAPI.willReturnValidJsonWebKeys()
1685+ val networkingClient: NetworkingClient = Mockito .spy(DefaultClient ())
16871686 val authCallback = mock<Callback <Credentials , AuthenticationException >>()
1688- val proxyAccount: Auth0 = Auth0 .getInstance(JwtTestUtils .EXPECTED_AUDIENCE , mockAPI.domain)
1689- proxyAccount.networkingClient = SSLTestUtils .testClient
1687+ val proxyAccount: Auth0 = Auth0 .getInstance(JwtTestUtils .EXPECTED_AUDIENCE , JwtTestUtils .EXPECTED_BASE_DOMAIN )
1688+ proxyAccount.networkingClient = networkingClient
1689+
1690+ // Stub JWKS response with valid keys
1691+ val encoded = Files .readAllBytes(Paths .get(" src/test/resources/rsa_jwks.json" ))
1692+ val jwksInputStream: InputStream = ByteArrayInputStream (encoded)
1693+ val jwksResponse = ServerResponse (200 , jwksInputStream, emptyMap())
1694+ Mockito .doReturn(jwksResponse).`when `(networkingClient).load(
1695+ eq(proxyAccount.getDomainUrl() + " .well-known/jwks.json" ),
1696+ any()
1697+ )
1698+
16901699 login(proxyAccount)
16911700 .withState(" 1234567890" )
16921701 .withNonce(" abcdefg" )
@@ -1723,7 +1732,6 @@ public class WebAuthProviderTest {
17231732 null
17241733 }.`when `(pkce).getToken(eq(" 1234" ), callbackCaptor.capture())
17251734 Assert .assertTrue(resume(intent))
1726- mockAPI.takeRequest()
17271735 ShadowLooper .idleMainLooper()
17281736 verify(authCallback).onFailure(authExceptionCaptor.capture())
17291737 val error = authExceptionCaptor.firstValue
@@ -1739,7 +1747,6 @@ public class WebAuthProviderTest {
17391747 error.cause?.message,
17401748 `is `(" Could not find a public key for kid \" null\" " )
17411749 )
1742- mockAPI.shutdown()
17431750 }
17441751
17451752 @Test
@@ -1803,7 +1810,6 @@ public class WebAuthProviderTest {
18031810 proxyAccount.networkingClient = SSLTestUtils .testClient
18041811 val authCallback = mock<Callback <Credentials , AuthenticationException >>()
18051812 login(proxyAccount)
1806- .withIdTokenVerificationIssuer(" " )
18071813 .withIdTokenVerificationIssuer(" " )
18081814 .withPKCE(pkce)
18091815 .start(activity, authCallback)
0 commit comments