@@ -17,11 +17,18 @@ package com.amplifyframework.auth.cognito.helpers
1717
1818import android.app.Activity
1919import android.content.Context
20+ import androidx.credentials.CreatePublicKeyCredentialRequest
2021import androidx.credentials.CreatePublicKeyCredentialResponse
2122import androidx.credentials.CredentialManager
2223import androidx.credentials.GetCredentialRequest
2324import androidx.credentials.GetCredentialResponse
2425import androidx.credentials.PublicKeyCredential
26+ import androidx.credentials.exceptions.domerrors.NotSupportedError
27+ import androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialDomException
28+ import androidx.credentials.exceptions.publickeycredential.GetPublicKeyCredentialDomException
29+ import com.amplifyframework.auth.cognito.exceptions.webauthn.WebAuthnNotSupportedException
30+ import io.kotest.assertions.throwables.shouldThrow
31+ import io.kotest.assertions.throwables.shouldThrowWithMessage
2532import io.kotest.matchers.shouldBe
2633import io.mockk.coEvery
2734import io.mockk.coVerify
@@ -31,6 +38,7 @@ import kotlinx.coroutines.test.runTest
3138import org.junit.Test
3239import org.junit.runner.RunWith
3340import org.robolectric.RobolectricTestRunner
41+ import org.robolectric.annotation.Config
3442
3543@RunWith(RobolectricTestRunner ::class )
3644class WebAuthnHelperTest {
@@ -72,9 +80,37 @@ class WebAuthnHelperTest {
7280 }
7381 }
7482
83+ @Test
84+ fun `throws WebAuthnNotSupportedException for NotSupported error for get` () = runTest {
85+ coEvery { credentialManager.getCredential(any(), any<GetCredentialRequest >()) } throws
86+ GetPublicKeyCredentialDomException (NotSupportedError ())
87+
88+ shouldThrow<WebAuthnNotSupportedException > {
89+ helper.getCredential(requestJson, mockk())
90+ }
91+ }
92+
7593 @Test
7694 fun `creates credential` () = runTest {
7795 val result = helper.createCredential(requestJson, mockk())
7896 result shouldBe responseJson
7997 }
98+
99+ @Test
100+ fun `throws WebAuthnNotSupportedException for NotSupported error for create` () = runTest {
101+ coEvery { credentialManager.createCredential(any(), any<CreatePublicKeyCredentialRequest >()) } throws
102+ CreatePublicKeyCredentialDomException (NotSupportedError ())
103+
104+ shouldThrow<WebAuthnNotSupportedException > {
105+ helper.createCredential(requestJson, mockk())
106+ }
107+ }
108+
109+ @Config(sdk = [27 ])
110+ @Test
111+ fun `throws WebAuthnNotSupportedException for devices below API 28` () = runTest {
112+ shouldThrowWithMessage<WebAuthnNotSupportedException >(" Passkeys are only supported on API 28 and above" ) {
113+ helper.createCredential(requestJson, mockk())
114+ }
115+ }
80116}
0 commit comments