From 3042b09a1f6d9f9e6d1f88dca862f9aad076dfd1 Mon Sep 17 00:00:00 2001 From: Manmohan Gupta Date: Tue, 9 Jun 2026 14:38:51 +0530 Subject: [PATCH] Fixed the auto-correct lint issue --- .../Auth0UniversalComponents.kt | 3 +- .../data/MyAccountProvider.kt | 3 +- .../universalcomponents/data/TokenManager.kt | 3 +- .../data/mapper/EnrollmentChallengeMapper.kt | 1 - .../data/mapper/ErrorMapper.kt | 4 +- .../data/network/WithErrorMapping.kt | 3 +- .../repository/MyAccountRepositoryImpl.kt | 1 - .../di/UniversalComponentsModule.kt | 7 +- .../AuthenticatorMethodViewModelFactory.kt | 2 +- .../domain/DispatcherProvider.kt | 3 +- .../domain/error/Auth0Error.kt | 5 +- .../domain/model/AuthenticatorMethod.kt | 1 - .../domain/model/EnrollmentChallenge.kt | 1 - .../domain/model/EnrollmentInput.kt | 1 - .../domain/model/EnrollmentResult.kt | 1 - .../domain/network/Result.kt | 3 +- .../usecase/EnrollAuthenticatorUseCase.kt | 106 +++++++++--------- .../usecase/VerifyAuthenticatorUseCase.kt | 35 +++--- .../helper/DispatcherProviderImpl.kt | 2 +- .../presentation/LoginHandler.kt | 3 +- .../navigation/AuthenticatorRoute.kt | 2 - .../AuthenticatorSettingsNavigationHost.kt | 11 +- .../presentation/ui/UiState.kt | 3 +- .../ui/components/EmptyAuthenticatorItem.kt | 3 +- .../components/EnrolledAuthenticatorItem.kt | 3 - .../ui/components/ErrorHandler.kt | 3 - .../presentation/ui/components/ErrorScreen.kt | 3 +- .../ui/components/GradientButton.kt | 3 +- .../presentation/ui/components/Loader.kt | 3 +- .../presentation/ui/components/SnackBar.kt | 2 +- .../presentation/ui/components/TopBar.kt | 2 +- .../presentation/ui/menu/MenuItem.kt | 4 +- .../ui/mfa/AuthenticatorEnrollScreen.kt | 6 +- .../ui/mfa/AuthenticatorMethodsScreen.kt | 7 +- .../ui/mfa/AuthenticatorSettingsComponent.kt | 2 +- .../ui/mfa/EmailEnrollmentScreen.kt | 9 +- .../ui/mfa/EnrolledAuthenticatorListScreen.kt | 8 -- .../ui/mfa/OTPVerificationScreen.kt | 5 +- .../presentation/ui/mfa/QREnrollmentScreen.kt | 20 ++-- .../ui/mfa/RecoveryCodeEnrollmentScreen.kt | 11 +- .../PrimaryAuthenticatorListScreen.kt | 20 ++-- .../SecondaryAuthenticatorListScreen.kt | 3 +- .../presentation/ui/mfa/phone/CountryData.kt | 2 - .../ui/mfa/phone/PhoneEnrollmentScreen.kt | 16 +-- .../ui/passkeys/PasskeyViewModel.kt | 21 ++-- .../presentation/ui/utils/Extensions.kt | 20 +++- .../presentation/ui/utils/ObserveAsEvents.kt | 3 +- .../presentation/ui/utils/UiUtils.kt | 4 +- .../AuthenticatorMethodsViewModel.kt | 2 - .../EnrolledAuthenticatorViewModel.kt | 11 +- .../viewmodel/EnrollmentViewModel.kt | 19 ++-- .../universalcomponents/theme/Auth0Color.kt | 1 - .../theme/Auth0Dimensions.kt | 1 - .../universalcomponents/theme/Auth0Theme.kt | 17 ++- .../auth0/universalcomponents/theme/Font.kt | 3 +- .../token/DefaultTokenProvider.kt | 2 +- .../token/TokenProvider.kt | 3 +- .../utils/CredentialManagerUtil.kt | 2 - .../universalcomponents/utils/DateUtil.kt | 4 +- .../universalcomponents/ExampleUnitTest.kt | 5 +- .../com/auth0/universalcomponents/TestData.kt | 47 ++++---- .../data/FakeRequestImpl.kt | 2 +- .../data/MyAccountProviderTest.kt | 1 - .../data/TokenManagerTest.kt | 13 +-- .../repository/MyAccountRepositoryImplTest.kt | 31 ++--- .../DeleteAuthenticationMethodUseCaseTest.kt | 3 +- .../usecase/EnrollAuthenticatorUseCaseTest.kt | 4 - ...tEnabledAuthenticatorMethodsUseCaseTest.kt | 4 - .../GetEnrolledAuthenticatorsUseCaseTest.kt | 9 +- .../usecase/VerifyAuthenticatorUseCaseTest.kt | 2 - .../helpers/TestDispatcherProvider.kt | 2 +- .../AuthenticatorMethodsViewModelTest.kt | 5 - .../EnrolledAuthenticatorViewModelTest.kt | 2 - .../viewmodel/EnrollmentViewModelTest.kt | 13 +-- .../viewmodel/PasskeyViewModelTest.kt | 16 +-- 75 files changed, 253 insertions(+), 358 deletions(-) diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/Auth0UniversalComponents.kt b/universal_components/src/main/java/com/auth0/universalcomponents/Auth0UniversalComponents.kt index ba6d238..4f1b69a 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/Auth0UniversalComponents.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/Auth0UniversalComponents.kt @@ -83,5 +83,4 @@ public object Auth0UniversalComponents { throw IllegalStateException("Auth0UniversalComponents must be initialized first.") } } - -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/data/MyAccountProvider.kt b/universal_components/src/main/java/com/auth0/universalcomponents/data/MyAccountProvider.kt index 8bbab8e..734da36 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/data/MyAccountProvider.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/data/MyAccountProvider.kt @@ -8,8 +8,7 @@ import com.auth0.universalcomponents.BuildConfig /** * Provider class that creates and provides instances of MyAccount from the Auth0 Android SDK. */ -class MyAccountProvider( -) { +class MyAccountProvider() { /** * Creates and returns a MyAccountAPIClient instance configured with the current access token. diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/data/TokenManager.kt b/universal_components/src/main/java/com/auth0/universalcomponents/data/TokenManager.kt index a45cf30..e33d4cf 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/data/TokenManager.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/data/TokenManager.kt @@ -48,7 +48,6 @@ class TokenManager private constructor() { * If not found or expired, fetches a new token and caches it */ suspend fun fetchToken(audience: String, scope: String): String { - val cachedCredentials = tokenMap[cacheKey(audience, scope)] if (cachedCredentials != null) { if (!willTokenExpire(cachedCredentials.expiresAt.time)) { @@ -90,4 +89,4 @@ class TokenManager private constructor() { val currentTimeInMillis = System.currentTimeMillis() return expiresAt <= currentTimeInMillis } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/EnrollmentChallengeMapper.kt b/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/EnrollmentChallengeMapper.kt index d073bc0..1b23f41 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/EnrollmentChallengeMapper.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/EnrollmentChallengeMapper.kt @@ -31,7 +31,6 @@ fun SdkMfaEnrollmentChallenge.toDomainModel(): MfaEnrollmentChallenge { ) } - fun SdkTotpEnrollmentChallenge.toDomainModel(): TotpEnrollmentChallenge { return TotpEnrollmentChallenge( id = this.id, diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/ErrorMapper.kt b/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/ErrorMapper.kt index d79c148..a663d32 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/ErrorMapper.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/data/mapper/ErrorMapper.kt @@ -25,7 +25,6 @@ internal object ErrorMapper { message = exception.message ?: "Unknown error occurred", cause = exception ) - } } @@ -101,7 +100,6 @@ internal object ErrorMapper { } } - private fun mapCredentialsManagerException( exception: CredentialsManagerException, scope: String? @@ -165,4 +163,4 @@ internal object ErrorMapper { ) } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/data/network/WithErrorMapping.kt b/universal_components/src/main/java/com/auth0/universalcomponents/data/network/WithErrorMapping.kt index c9e8983..eff75e5 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/data/network/WithErrorMapping.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/data/network/WithErrorMapping.kt @@ -3,7 +3,6 @@ package com.auth0.universalcomponents.data.network import com.auth0.universalcomponents.data.mapper.ErrorMapper import kotlin.coroutines.cancellation.CancellationException - /** * Executes a suspend request and maps exceptions to Auth0Error. * Rethrows [CancellationException] to preserve structured concurrency. @@ -23,4 +22,4 @@ internal suspend inline fun withErrorMapping( } catch (e: Throwable) { throw ErrorMapper.mapToAuth0Error(e, scope) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImpl.kt b/universal_components/src/main/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImpl.kt index 7846b61..14755b9 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImpl.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImpl.kt @@ -79,7 +79,6 @@ class MyAccountRepositoryImpl( val client = myAccountProvider.getMyAccount(accessToken) client.deleteAuthenticationMethod(authenticationMethodId).await() } - } /** diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/di/UniversalComponentsModule.kt b/universal_components/src/main/java/com/auth0/universalcomponents/di/UniversalComponentsModule.kt index 7c9ec17..0468377 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/di/UniversalComponentsModule.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/di/UniversalComponentsModule.kt @@ -21,8 +21,7 @@ import com.auth0.universalcomponents.domain.usecase.VerifyAuthenticatorUseCase object UniversalComponentsModule { - - //Viewmodel factories + // Viewmodel factories fun provideAuthenticatorMethodViewModelFactory(): AuthenticatorMethodViewModelFactory { return AuthenticatorMethodViewModelFactory( getEnabledAuthenticatorMethodsUseCase = provideEnabledAuthenticatorMethodsUseCase() @@ -57,7 +56,7 @@ object UniversalComponentsModule { ) } - //Use cases + // Use cases private fun provideEnabledAuthenticatorMethodsUseCase(): GetEnabledAuthenticatorMethodsUseCase { return GetEnabledAuthenticatorMethodsUseCase( repository = provideMyAccountRepository(), @@ -76,7 +75,6 @@ object UniversalComponentsModule { ) } - private fun provideEnrollAuthenticatorUseCase(): EnrollAuthenticatorUseCase { return EnrollAuthenticatorUseCase( repository = provideMyAccountRepository() @@ -106,5 +104,4 @@ object UniversalComponentsModule { private fun provideTokenManager(): TokenManager { return TokenManager.getInstance() } - } diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/di/viewmodelfactory/AuthenticatorMethodViewModelFactory.kt b/universal_components/src/main/java/com/auth0/universalcomponents/di/viewmodelfactory/AuthenticatorMethodViewModelFactory.kt index 4635c15..5b0232a 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/di/viewmodelfactory/AuthenticatorMethodViewModelFactory.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/di/viewmodelfactory/AuthenticatorMethodViewModelFactory.kt @@ -18,4 +18,4 @@ class AuthenticatorMethodViewModelFactory(private val getEnabledAuthenticatorMet else -> throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}") } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/DispatcherProvider.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/DispatcherProvider.kt index 8855767..950e13e 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/DispatcherProvider.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/DispatcherProvider.kt @@ -2,10 +2,9 @@ package com.auth0.universalcomponents.domain import kotlinx.coroutines.CoroutineDispatcher - interface DispatcherProvider { val main: CoroutineDispatcher val io: CoroutineDispatcher val default: CoroutineDispatcher val unconfined: CoroutineDispatcher -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/error/Auth0Error.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/error/Auth0Error.kt index cdfaab4..697abc2 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/error/Auth0Error.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/error/Auth0Error.kt @@ -5,7 +5,8 @@ package com.auth0.universalcomponents.domain.error * These are mapped from infrastructure exceptions (AuthenticationException, MyAccountException, etc.) */ sealed class Auth0Error( - override val message: String, override val cause: Throwable + override val message: String, + override val cause: Throwable ) : Throwable(message, cause) { data class AccessDenied( @@ -63,7 +64,6 @@ sealed class Auth0Error( override val cause: Throwable ) : Auth0Error(message, cause) - // Validation Errors data class ValidationError( override val message: String = "Validation failed", @@ -97,7 +97,6 @@ sealed class Auth0Error( val shouldRetry: Boolean = false ) : Auth0Error(message, cause) - // Generic/Unknown Errors data class Unknown( override val message: String = "An unknown error occurred", diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/AuthenticatorMethod.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/AuthenticatorMethod.kt index 6280520..4937241 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/AuthenticatorMethod.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/AuthenticatorMethod.kt @@ -9,7 +9,6 @@ data class AuthenticatorMethod( val secondaryAuthenticators: List ) - data class PrimaryAuthenticator( val id: String, val type: String, diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentChallenge.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentChallenge.kt index a331355..82d3a98 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentChallenge.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentChallenge.kt @@ -124,4 +124,3 @@ data class PasskeyAuthenticationMethod( val credentialBackedUp: Boolean, val publicKey: String? ) : Parcelable - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentInput.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentInput.kt index 86799cc..e2a3673 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentInput.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentInput.kt @@ -1,6 +1,5 @@ package com.auth0.universalcomponents.domain.model - sealed class EnrollmentInput { object None : EnrollmentInput() diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentResult.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentResult.kt index 828d990..b50d6f8 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentResult.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/model/EnrollmentResult.kt @@ -3,7 +3,6 @@ package com.auth0.universalcomponents.domain.model import android.os.Parcelable import kotlinx.parcelize.Parcelize - /** * Wrapper for different enrollment challenge types */ diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/network/Result.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/network/Result.kt index 952316b..5e86d01 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/network/Result.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/network/Result.kt @@ -10,7 +10,6 @@ sealed interface Result { data class Error(val error: E) : Result } - inline fun Result.onSuccess(action: (T) -> Unit): Result { return when (this) { is Result.Error -> this @@ -32,4 +31,4 @@ inline fun Result.onError(action: (E) -> Unit): Result } } -typealias EmptyResult = Result \ No newline at end of file +typealias EmptyResult = Result diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCase.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCase.kt index 7bde6b4..023b5a3 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCase.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCase.kt @@ -29,66 +29,66 @@ class EnrollAuthenticatorUseCase( authenticatorType: AuthenticatorType, input: EnrollmentInput = EnrollmentInput.None ): Result = safeCall { - val result = when (authenticatorType) { - AuthenticatorType.TOTP -> { - val challenge = repository.enrollTotp(REQUIRED_SCOPES) - EnrollmentResult.TotpEnrollment( - challenge = challenge, - authenticationMethodId = challenge.id, - authSession = challenge.authSession - ) - } + val result = when (authenticatorType) { + AuthenticatorType.TOTP -> { + val challenge = repository.enrollTotp(REQUIRED_SCOPES) + EnrollmentResult.TotpEnrollment( + challenge = challenge, + authenticationMethodId = challenge.id, + authSession = challenge.authSession + ) + } - AuthenticatorType.PUSH -> { - val challenge = repository.enrollPushNotification(REQUIRED_SCOPES) - EnrollmentResult.TotpEnrollment( - challenge = challenge, - authenticationMethodId = challenge.id, - authSession = challenge.authSession - ) - } + AuthenticatorType.PUSH -> { + val challenge = repository.enrollPushNotification(REQUIRED_SCOPES) + EnrollmentResult.TotpEnrollment( + challenge = challenge, + authenticationMethodId = challenge.id, + authSession = challenge.authSession + ) + } - AuthenticatorType.RECOVERY_CODE -> { - val challenge = repository.enrollRecoveryCode(REQUIRED_SCOPES) - EnrollmentResult.RecoveryCodeEnrollment( - challenge = challenge, - authenticationMethodId = challenge.id, - authSession = challenge.authSession - ) - } + AuthenticatorType.RECOVERY_CODE -> { + val challenge = repository.enrollRecoveryCode(REQUIRED_SCOPES) + EnrollmentResult.RecoveryCodeEnrollment( + challenge = challenge, + authenticationMethodId = challenge.id, + authSession = challenge.authSession + ) + } - AuthenticatorType.EMAIL -> { - require(input is EnrollmentInput.Email) { - "Email enrollment requires EnrollmentInput.Email" - } - val challenge = - repository.enrollEmail(input.email, REQUIRED_SCOPES) - EnrollmentResult.DefaultEnrollment( - challenge = challenge, - authenticationMethodId = challenge.id, - authSession = challenge.authSession - ) + AuthenticatorType.EMAIL -> { + require(input is EnrollmentInput.Email) { + "Email enrollment requires EnrollmentInput.Email" } + val challenge = + repository.enrollEmail(input.email, REQUIRED_SCOPES) + EnrollmentResult.DefaultEnrollment( + challenge = challenge, + authenticationMethodId = challenge.id, + authSession = challenge.authSession + ) + } - AuthenticatorType.PHONE -> { - require(input is EnrollmentInput.Phone) { - "Phone enrollment requires EnrollmentInput.Phone" - } - val challenge = repository.enrollPhone( - phoneNumber = input.phoneNumber, - scope = REQUIRED_SCOPES - ) - EnrollmentResult.DefaultEnrollment( - challenge = challenge, - authenticationMethodId = challenge.id, - authSession = challenge.authSession - ) + AuthenticatorType.PHONE -> { + require(input is EnrollmentInput.Phone) { + "Phone enrollment requires EnrollmentInput.Phone" } + val challenge = repository.enrollPhone( + phoneNumber = input.phoneNumber, + scope = REQUIRED_SCOPES + ) + EnrollmentResult.DefaultEnrollment( + challenge = challenge, + authenticationMethodId = challenge.id, + authSession = challenge.authSession + ) + } - else -> { - throw UnsupportedOperationException("Unsupported enrollment type: $authenticatorType") - } + else -> { + throw UnsupportedOperationException("Unsupported enrollment type: $authenticatorType") } - result } + result + } } diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCase.kt b/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCase.kt index 4f6980d..899befd 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCase.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCase.kt @@ -26,25 +26,24 @@ class VerifyAuthenticatorUseCase( suspend operator fun invoke( input: VerificationInput ): Result = safeCall { + val authMethod = when (input) { + is VerificationInput.WithOtp -> { + repository.verifyOtp( + authenticationMethodId = input.authenticationMethodId, + otpCode = input.otpCode, + authSession = input.authSession, + REQUIRED_SCOPES + ) + } - val authMethod = when (input) { - is VerificationInput.WithOtp -> { - repository.verifyOtp( - authenticationMethodId = input.authenticationMethodId, - otpCode = input.otpCode, - authSession = input.authSession, - REQUIRED_SCOPES - ) - } - - is VerificationInput.WithoutOtp -> { - repository.verifyWithoutOtp( - authenticationMethodId = input.authenticationMethodId, - authSession = input.authSession, - REQUIRED_SCOPES - ) - } + is VerificationInput.WithoutOtp -> { + repository.verifyWithoutOtp( + authenticationMethodId = input.authenticationMethodId, + authSession = input.authSession, + REQUIRED_SCOPES + ) } - authMethod } + authMethod + } } diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/helper/DispatcherProviderImpl.kt b/universal_components/src/main/java/com/auth0/universalcomponents/helper/DispatcherProviderImpl.kt index 96cff84..c70fc16 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/helper/DispatcherProviderImpl.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/helper/DispatcherProviderImpl.kt @@ -14,4 +14,4 @@ class DispatcherProviderImpl : DispatcherProvider { get() = Dispatchers.Default override val unconfined: CoroutineDispatcher get() = Dispatchers.Unconfined -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/LoginHandler.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/LoginHandler.kt index 6b187b3..f56620f 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/LoginHandler.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/LoginHandler.kt @@ -9,7 +9,6 @@ import com.auth0.universalcomponents.domain.error.Auth0Error import com.auth0.universalcomponents.domain.network.Result import com.auth0.universalcomponents.domain.network.safeCall - suspend fun mfaRecoveryHandler( context: Context, scope: String, @@ -27,4 +26,4 @@ suspend fun mfaRecoveryHandler( credentials.scope ?: "", ) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorRoute.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorRoute.kt index 7321d9f..4a3cbf5 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorRoute.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorRoute.kt @@ -26,5 +26,3 @@ sealed interface AuthenticatorRoute { @Serializable object PasskeyEnable } - - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorSettingsNavigationHost.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorSettingsNavigationHost.kt index affbd86..6bc3d27 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorSettingsNavigationHost.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/navigation/AuthenticatorSettingsNavigationHost.kt @@ -12,12 +12,10 @@ import com.auth0.universalcomponents.presentation.ui.mfa.EnrolledAuthenticatorLi import com.auth0.universalcomponents.presentation.ui.mfa.OTPVerificationScreen import com.auth0.universalcomponents.presentation.ui.passkeys.PasskeyEnableScreen - @Composable internal fun AuthenticatorSettingsNavigationHost( navController: NavHostController, ) { - NavHost( navController = navController, startDestination = AuthenticatorRoute.AuthenticatorMethodList @@ -48,7 +46,8 @@ internal fun AuthenticatorSettingsNavigationHost( }, onBackPress = { navController.navigateUp() - }) + } + ) } composable { @@ -93,7 +92,6 @@ internal fun AuthenticatorSettingsNavigationHost( ) ) } - } } ) @@ -114,7 +112,8 @@ internal fun AuthenticatorSettingsNavigationHost( navController.navigate(AuthenticatorRoute.EnrolledAuthenticatorMethod(args.authenticatorType)) { popUpTo { inclusive = false } } - }) + } + ) } composable { @@ -128,4 +127,4 @@ internal fun AuthenticatorSettingsNavigationHost( ) } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/UiState.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/UiState.kt index 9c56b53..0d395f3 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/UiState.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/UiState.kt @@ -2,5 +2,4 @@ package com.auth0.universalcomponents.presentation.ui import com.auth0.universalcomponents.domain.error.Auth0Error - -data class UiError(val error: Auth0Error, val onRetry: () -> Unit) \ No newline at end of file +data class UiError(val error: Auth0Error, val onRetry: () -> Unit) diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EmptyAuthenticatorItem.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EmptyAuthenticatorItem.kt index 9574385..a7c2713 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EmptyAuthenticatorItem.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EmptyAuthenticatorItem.kt @@ -13,7 +13,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.auth0.universalcomponents.theme.Auth0Theme - @Composable fun EmptyAuthenticatorItem( modifier: Modifier = Modifier, @@ -52,4 +51,4 @@ fun EmptyAuthenticatorItem( } } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EnrolledAuthenticatorItem.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EnrolledAuthenticatorItem.kt index 67b8def..d4507ad 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EnrolledAuthenticatorItem.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/EnrolledAuthenticatorItem.kt @@ -32,7 +32,6 @@ import com.auth0.universalcomponents.presentation.ui.menu.MenuAction import com.auth0.universalcomponents.presentation.ui.menu.MenuItem import com.auth0.universalcomponents.theme.Auth0Theme - @Composable fun EnrolledAuthenticatorItem( title: String, @@ -119,5 +118,3 @@ fun EnrolledAuthenticatorItem( } } } - - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorHandler.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorHandler.kt index fbaddf7..55529f1 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorHandler.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorHandler.kt @@ -102,7 +102,6 @@ fun ErrorHandler( shouldRetry = shouldRetry, onRetryClick = uiError.onRetry ) - } else -> { @@ -114,7 +113,5 @@ fun ErrorHandler( onRetryClick = uiError.onRetry ) } - } } - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorScreen.kt index 3549460..09a67e1 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/ErrorScreen.kt @@ -93,7 +93,6 @@ fun ErrorScreen( } } - @Composable fun MessageWithLink( message: String, @@ -138,4 +137,4 @@ fun MessageWithLink( } Text(annotatedString, textAlign = TextAlign.Center) -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/GradientButton.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/GradientButton.kt index 211d8e6..f3bbb06 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/GradientButton.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/GradientButton.kt @@ -86,5 +86,4 @@ fun GradientButton( } } } - -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/Loader.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/Loader.kt index 7c6f41b..f3d9fa1 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/Loader.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/Loader.kt @@ -8,7 +8,6 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.auth0.universalcomponents.theme.Auth0Theme - @Composable public fun CircularLoader( modifier: Modifier = Modifier, @@ -22,4 +21,4 @@ public fun CircularLoader( color = resolvedColor, strokeWidth = strokeWidth ) -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/SnackBar.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/SnackBar.kt index cef0585..e10c935 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/SnackBar.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/SnackBar.kt @@ -25,4 +25,4 @@ public fun SnackBar( LaunchedEffect(Unit) { snackbarHostState.showSnackbar("Copied to clipboard") } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/TopBar.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/TopBar.kt index 711af21..1c96e86 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/TopBar.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/components/TopBar.kt @@ -84,4 +84,4 @@ fun TopBar( ) } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/menu/MenuItem.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/menu/MenuItem.kt index cf74201..0ee9bef 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/menu/MenuItem.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/menu/MenuItem.kt @@ -1,6 +1,6 @@ package com.auth0.universalcomponents.presentation.ui.menu -//TODO: Move this to the correct package based on usage +// TODO: Move this to the correct package based on usage sealed interface MenuAction { object Remove : MenuAction @@ -9,4 +9,4 @@ sealed interface MenuAction { data class MenuItem( val label: String, val action: MenuAction -) \ No newline at end of file +) diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorEnrollScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorEnrollScreen.kt index 4fcb7cc..3145287 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorEnrollScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorEnrollScreen.kt @@ -42,11 +42,13 @@ fun AuthenticatorEnrollmentScreen( onBackClick = onBackClick, onContinue = { id, type -> onContinue( - id, type, null + id, + type, + null ) } ) else -> ErrorScreen(mainErrorMessage = "Invalid State") } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorMethodsScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorMethodsScreen.kt index f59ad0d..d539d85 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorMethodsScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorMethodsScreen.kt @@ -34,7 +34,6 @@ import com.auth0.universalcomponents.presentation.viewmodel.SecondaryAuthenticat import com.auth0.universalcomponents.theme.Auth0Theme import com.auth0.universalcomponents.utils.createCredential - @OptIn(ExperimentalMaterial3Api::class) @Composable fun AuthenticatorMethodsScreen( @@ -55,7 +54,6 @@ fun AuthenticatorMethodsScreen( val passkeyUiState by passkeyViewModel.uiState.collectAsStateWithLifecycle() val context = LocalContext.current - ObserveAsEvents(passkeyViewModel.events) { event -> when (event) { is PasskeyEvent.EnrollmentSuccess -> { @@ -64,7 +62,6 @@ fun AuthenticatorMethodsScreen( } } - Scaffold( topBar = { TopBar( @@ -170,7 +167,8 @@ fun AuthenticatorMethodsScreen( .padding(horizontal = dimensions.spacingMd) ) { ErrorHandler( - uiError = state.error, shouldRetry = state.shouldRetry + uiError = state.error, + shouldRetry = state.shouldRetry ) } } @@ -180,4 +178,3 @@ fun AuthenticatorMethodsScreen( } } } - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorSettingsComponent.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorSettingsComponent.kt index 90c7715..d1e5f73 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorSettingsComponent.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/AuthenticatorSettingsComponent.kt @@ -52,4 +52,4 @@ public fun AuthenticatorSettingsComponent( navController ) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EmailEnrollmentScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EmailEnrollmentScreen.kt index 6a4815f..63b8b1e 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EmailEnrollmentScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EmailEnrollmentScreen.kt @@ -102,7 +102,6 @@ fun EmailEnrollmentScreen( .padding(paddingValues) .padding(horizontal = dimensions.spacingMd, vertical = 38.dp) ) { - Column( modifier = Modifier.fillMaxWidth(), ) { @@ -146,7 +145,7 @@ fun EmailEnrollmentScreen( private fun LoadingScreen(state: EnrollmentUiState) { val colors = Auth0Theme.colors - if (state.enrollingAuthenticator) + if (state.enrollingAuthenticator) { Box( modifier = Modifier .fillMaxSize() @@ -155,6 +154,7 @@ private fun LoadingScreen(state: EnrollmentUiState) { ) { CircularLoader() } + } } @Composable @@ -262,8 +262,7 @@ private fun EmailTextField( ), shadowElevation = 10.dp, shape = shapes.medium, - ) - { + ) { BasicTextField( value = email, onValueChange = onEmailChange, @@ -320,4 +319,4 @@ private fun ContinueButton( style = typography.label ) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EnrolledAuthenticatorListScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EnrolledAuthenticatorListScreen.kt index 6456d32..6fc9178 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EnrolledAuthenticatorListScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/EnrolledAuthenticatorListScreen.kt @@ -112,7 +112,6 @@ fun EnrolledAuthenticatorListScreen( .padding(paddingValues), contentAlignment = Alignment.Center ) { - if (uiState.loading) { CircularLoader() } else { @@ -233,12 +232,5 @@ fun AuthenticatorListContent( ) } } - } } - - - - - - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/OTPVerificationScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/OTPVerificationScreen.kt index a85b993..ee2eddc 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/OTPVerificationScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/OTPVerificationScreen.kt @@ -103,7 +103,6 @@ fun OTPVerificationScreen( } } - Scaffold( topBar = { TopBar( @@ -246,7 +245,7 @@ private fun OTPFieldError( private fun LoadingScreen(state: EnrollmentUiState) { val colors = Auth0Theme.colors - if (state.enrollingAuthenticator) + if (state.enrollingAuthenticator) { Box( modifier = Modifier .fillMaxSize() @@ -255,6 +254,7 @@ private fun LoadingScreen(state: EnrollmentUiState) { ) { CircularLoader() } + } } @Composable @@ -303,7 +303,6 @@ private fun OTPInputField( ) } - @Composable private fun OTPBox( modifier: Modifier = Modifier, diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/QREnrollmentScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/QREnrollmentScreen.kt index c8d8290..e5846a2 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/QREnrollmentScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/QREnrollmentScreen.kt @@ -5,11 +5,11 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -280,7 +280,6 @@ private fun ManualCodeSection( ) } - @Composable private fun CopyCodeButton( onCopyClick: () -> Unit @@ -319,7 +318,6 @@ private fun CopyCodeButton( shape = shapes.large, onClick = onCopyClick ) { - Row( horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically, @@ -371,7 +369,6 @@ private fun ContinueButtonSection( } } - @Composable private fun InstructionsText() { val colors = Auth0Theme.colors @@ -380,7 +377,6 @@ private fun InstructionsText() { val instructionText = "Use your Authenticator App (like Google Authenticator or Auth0 Guardian) to scan this QR code." - Text( modifier = Modifier.fillMaxWidth(0.9f), text = instructionText, @@ -494,10 +490,9 @@ private fun DownloadLinkText( Text(annotatedString, textAlign = TextAlign.Center) } - @Composable private fun LoadingScreen(state: EnrollmentUiState) { - if (state.enrollingAuthenticator || state.verifyingAuthenticator) + if (state.enrollingAuthenticator || state.verifyingAuthenticator) { Box( modifier = Modifier .fillMaxSize() @@ -506,6 +501,7 @@ private fun LoadingScreen(state: EnrollmentUiState) { ) { CircularLoader() } + } } @Composable @@ -515,7 +511,6 @@ private fun ErrorScreen(state: EnrollmentUiState) { } } - /** * Generates a QR code bitmap using ZXing. * @@ -540,8 +535,11 @@ private fun generateQRCode( for (x in 0 until width) { for (y in 0 until height) { - bitmap[x, y] = if (bitMatrix[x, y]) qrCodeColor.toArgb() - else qrBackgroundColor.toArgb() + bitmap[x, y] = if (bitMatrix[x, y]) { + qrCodeColor.toArgb() + } else { + qrBackgroundColor.toArgb() + } } } bitmap @@ -549,4 +547,4 @@ private fun generateQRCode( e.printStackTrace() null } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/RecoveryCodeEnrollmentScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/RecoveryCodeEnrollmentScreen.kt index 623936f..c9baffb 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/RecoveryCodeEnrollmentScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/RecoveryCodeEnrollmentScreen.kt @@ -63,7 +63,8 @@ fun RecoveryCodeEnrollmentScreen( ), onBackClick: () -> Unit, onContinue: ( - String, String + String, + String ) -> Unit ) { val colors = Auth0Theme.colors @@ -92,7 +93,6 @@ fun RecoveryCodeEnrollmentScreen( } } - Scaffold( topBar = { TopBar( @@ -168,7 +168,6 @@ private fun RecoveryCodeContent( } } - @Composable private fun RecoveryCodeHeader() { val colors = Auth0Theme.colors @@ -231,7 +230,6 @@ private fun RecoveryCodeDisplay(code: String, onClick: () -> Unit) { ) IconButton(onClick = onClick) { - Icon( painter = painterResource(id = R.drawable.ic_copy), contentDescription = "Copy", @@ -282,7 +280,7 @@ private fun ContinueButton( private fun LoadingScreen(state: EnrollmentUiState) { val colors = Auth0Theme.colors - if (state.enrollingAuthenticator) + if (state.enrollingAuthenticator) { Box( modifier = Modifier .fillMaxSize() @@ -291,6 +289,7 @@ private fun LoadingScreen(state: EnrollmentUiState) { ) { CircularLoader() } + } } @Composable @@ -298,4 +297,4 @@ private fun ErrorScreen(state: EnrollmentUiState) { state.uiError?.let { ErrorHandler(it) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/PrimaryAuthenticatorListScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/PrimaryAuthenticatorListScreen.kt index 3f2d4ba..26f86e9 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/PrimaryAuthenticatorListScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/PrimaryAuthenticatorListScreen.kt @@ -52,14 +52,14 @@ fun PrimaryAuthenticatorListScreen( .fillMaxWidth() .background(colors.backgroundLayerBase) ) { - AnimatedVisibility(visible = primaryAuthenticatorUiData.isEmpty() && isCardVisible) { - PasskeyInfoCard( - onAddPasskeyClick = onAddPasskeyClick, - onDismissClick = { - isCardVisible = false - } - ) - } + AnimatedVisibility(visible = primaryAuthenticatorUiData.isEmpty() && isCardVisible) { + PasskeyInfoCard( + onAddPasskeyClick = onAddPasskeyClick, + onDismissClick = { + isCardVisible = false + } + ) + } SignInMethodsSection( isPasskeyEnrolled = primaryAuthenticatorUiData.isNotEmpty(), @@ -108,7 +108,6 @@ private fun PasskeyInfoCard( Spacer(modifier = Modifier.height(dimensions.spacingLg)) - Text( text = stringResource(R.string.what_are_passkeys), style = typography.title, @@ -149,7 +148,8 @@ private fun PasskeyInfoCard( contentColor = colors.backgroundPrimary ), elevation = ButtonDefaults.buttonElevation( - defaultElevation = 2.dp, pressedElevation = 2.dp + defaultElevation = 2.dp, + pressedElevation = 2.dp ) ) { Icon( diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/SecondaryAuthenticatorListScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/SecondaryAuthenticatorListScreen.kt index 892e661..3af3390 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/SecondaryAuthenticatorListScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/authenticator_methods/SecondaryAuthenticatorListScreen.kt @@ -15,7 +15,6 @@ import com.auth0.universalcomponents.presentation.ui.components.EmptyAuthenticat import com.auth0.universalcomponents.presentation.viewmodel.SecondaryAuthenticatorUiData import com.auth0.universalcomponents.theme.Auth0Theme - /** * Screen displaying the list of enabled authenticators */ @@ -74,4 +73,4 @@ private fun getMFAMethodIcon(authenticatorType: AuthenticatorType): Painter { AuthenticatorType.PASSKEY -> R.drawable.ic_passkey } ) -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/CountryData.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/CountryData.kt index 404d8a4..96260e4 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/CountryData.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/CountryData.kt @@ -23,7 +23,6 @@ data class Country( } } - private enum class CountryData( val countryCode: String, val phoneCode: String @@ -271,7 +270,6 @@ private enum class CountryData( Zimbabwe("ZW", "+263") } - private fun countryCodeToEmojiFlag(countryCode: String): String = countryCode .uppercase() diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/PhoneEnrollmentScreen.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/PhoneEnrollmentScreen.kt index 5287c1b..ebc950a 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/PhoneEnrollmentScreen.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/mfa/phone/PhoneEnrollmentScreen.kt @@ -59,7 +59,6 @@ import com.auth0.universalcomponents.presentation.viewmodel.EnrollmentViewModel import com.auth0.universalcomponents.theme.Auth0Theme import com.auth0.universalcomponents.utils.ValidationUtil - @OptIn(ExperimentalMaterial3Api::class) @Composable fun PhoneEnrollmentScreen( @@ -112,7 +111,6 @@ fun PhoneEnrollmentScreen( .padding(paddingValues) .padding(horizontal = dimensions.spacingMd, vertical = dimensions.spacingXl) ) { - Column( modifier = Modifier.fillMaxWidth(), ) { @@ -158,7 +156,6 @@ fun PhoneEnrollmentScreen( LoadingScreen(uiState) ErrorScreen(uiState) - } if (showCountrySelector) { @@ -173,7 +170,6 @@ fun PhoneEnrollmentScreen( } } - @Composable private fun PhoneEnrollmentHeader() { val colors = Auth0Theme.colors @@ -200,7 +196,7 @@ private fun PhoneEnrollmentHeader() { private fun LoadingScreen( state: EnrollmentUiState ) { - if (state.enrollingAuthenticator) + if (state.enrollingAuthenticator) { Box( modifier = Modifier .fillMaxSize() @@ -209,6 +205,7 @@ private fun LoadingScreen( ) { CircularLoader() } + } } @Composable @@ -218,7 +215,6 @@ private fun ErrorScreen(state: EnrollmentUiState) { } } - @Composable private fun PhoneFormField( phoneNumber: String, @@ -247,7 +243,6 @@ private fun PhoneFormField( ) } - @Composable private fun PhoneTextField( phoneNumber: String, @@ -363,7 +358,6 @@ private fun PhoneTextField( } } - @OptIn(ExperimentalMaterial3Api::class) @Composable private fun CountrySelectorSheet( @@ -385,7 +379,7 @@ private fun CountrySelectorSheet( } else { countries.filter { it.name.startsWith(searchQuery, ignoreCase = true) || - it.phoneCode.startsWith(searchQuery) + it.phoneCode.startsWith(searchQuery) } } } @@ -454,7 +448,6 @@ private fun CountrySelectorSheet( } } - @Composable private fun CountryItem( country: Country, @@ -495,7 +488,6 @@ private fun CountryItem( } } - @Composable private fun ContinueButton( onClick: () -> Unit @@ -514,4 +506,4 @@ private fun ContinueButton( style = typography.label ) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/passkeys/PasskeyViewModel.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/passkeys/PasskeyViewModel.kt index ff867aa..a0c7d2d 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/passkeys/PasskeyViewModel.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/passkeys/PasskeyViewModel.kt @@ -61,7 +61,6 @@ class PasskeyViewModel( private const val SCOPE = "create:me:authentication_methods" } - private val eventChannel = Channel() val events = eventChannel.receiveAsFlow() @@ -109,9 +108,11 @@ class PasskeyViewModel( eventChannel.send(PasskeyEvent.EnrollmentSuccess) } catch (exception: Auth0Error) { _uiState.update { - PasskeyUiState.Error(UiError(Auth0Error.Unknown(cause = exception), { - enrollPasskey(createCredential) - })) + PasskeyUiState.Error( + UiError(Auth0Error.Unknown(cause = exception), { + enrollPasskey(createCredential) + }) + ) } } catch (exception: CreateCredentialException) { when (exception) { @@ -122,9 +123,12 @@ class PasskeyViewModel( else -> { val err = handleCreationFailure(exception) _uiState.update { - PasskeyUiState.Error(UiError(err, { - enrollPasskey(createCredential) - }), err.shouldRetry) + PasskeyUiState.Error( + UiError(err, { + enrollPasskey(createCredential) + }), + err.shouldRetry + ) } } } @@ -141,7 +145,6 @@ class PasskeyViewModel( private fun handleCreationFailure(exception: CreateCredentialException): Auth0Error.PasskeyError { return when (exception) { - is CreateCredentialInterruptedException -> { Auth0Error.PasskeyError( "Passkey authentication was interrupted. Please retry again.", @@ -166,4 +169,4 @@ class PasskeyViewModel( } } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/Extensions.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/Extensions.kt index f2e008b..a6d1b08 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/Extensions.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/Extensions.kt @@ -9,23 +9,33 @@ import com.auth0.universalcomponents.presentation.viewmodel.SecondaryAuthenticat internal fun SecondaryAuthenticator.toAuthenticatorUiModel(): SecondaryAuthenticatorUiData { return when (type) { AuthenticatorType.TOTP -> SecondaryAuthenticatorUiData( - "Authenticator App", type, confirmed + "Authenticator App", + type, + confirmed ) AuthenticatorType.PHONE -> SecondaryAuthenticatorUiData( - "SMS OTP", type, confirmed + "SMS OTP", + type, + confirmed ) AuthenticatorType.EMAIL -> SecondaryAuthenticatorUiData( - "Email OTP", type, confirmed + "Email OTP", + type, + confirmed ) AuthenticatorType.PUSH -> SecondaryAuthenticatorUiData( - "Push Notification", type, confirmed + "Push Notification", + type, + confirmed ) AuthenticatorType.RECOVERY_CODE -> SecondaryAuthenticatorUiData( - "Recovery Code", type, confirmed + "Recovery Code", + type, + confirmed ) else -> { diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/ObserveAsEvents.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/ObserveAsEvents.kt index 084eb04..a78a736 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/ObserveAsEvents.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/ObserveAsEvents.kt @@ -9,7 +9,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.withContext - @Composable fun ObserveAsEvents( flow: Flow, @@ -25,4 +24,4 @@ fun ObserveAsEvents( } } } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/UiUtils.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/UiUtils.kt index a9fd4db..4a61bc0 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/UiUtils.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/ui/utils/UiUtils.kt @@ -46,7 +46,6 @@ object UiUtils { } } - /** * Formats the default name for the given authenticator type */ @@ -61,7 +60,6 @@ object UiUtils { } } - /** * Returns appropriate text content based on authenticator type */ @@ -93,4 +91,4 @@ object UiUtils { val primaryText: String, val description: String? = null ) -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModel.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModel.kt index 5efa322..a48fe1a 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModel.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModel.kt @@ -16,7 +16,6 @@ import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch - /** * Data class representing the UI data for primary authenticator methods * @property id Unique identifier for the authenticator @@ -71,7 +70,6 @@ class AuthenticatorMethodsViewModel( initialValue = AuthenticatorUiState.Loading ) - fun fetchAuthenticatorMethods() { viewModelScope.launch { _uiState.value = AuthenticatorUiState.Loading diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModel.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModel.kt index e118799..55b5a1a 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModel.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModel.kt @@ -17,7 +17,6 @@ import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch - data class EnrolledUiState( val loading: Boolean = false, val authenticators: List = emptyList(), @@ -54,13 +53,11 @@ class EnrolledAuthenticatorViewModel( * Only returns confirmed methods */ fun fetchEnrolledAuthenticators(authenticatorType: AuthenticatorType) { - _uiState.update { it.copy(loading = true, uiError = null) } viewModelScope.launch { - getEnrolledAuthenticatorsUseCase(authenticatorType) .onSuccess { data -> cachedAuthenticators = data // Update cache @@ -76,7 +73,8 @@ class EnrolledAuthenticatorViewModel( it.copy( loading = false, uiError = UiError( - error, { + error, + { fetchEnrolledAuthenticators(authenticatorType) } ) @@ -92,13 +90,11 @@ class EnrolledAuthenticatorViewModel( * @param authenticationMethodId The ID of the authentication method to delete */ fun deleteAuthenticationMethod(authenticationMethodId: String) { - _uiState.update { it.copy(loading = true, uiError = null) } viewModelScope.launch { - val updatedList = cachedAuthenticators.filter { it.id != authenticationMethodId } deleteAuthenticationMethodUseCase(authenticationMethodId) @@ -117,7 +113,8 @@ class EnrolledAuthenticatorViewModel( it.copy( loading = false, uiError = UiError( - err, { + err, + { deleteAuthenticationMethod(authenticationMethodId) } ) diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModel.kt b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModel.kt index b5403cd..a99edc1 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModel.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModel.kt @@ -23,7 +23,6 @@ import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch - /** * Represent different UI state while enrolling an authenticator */ @@ -51,7 +50,6 @@ sealed interface EnrollmentEvent { ) : EnrollmentEvent } - class EnrollmentViewModel( private val enrollAuthenticatorUseCase: EnrollAuthenticatorUseCase, private val verifyAuthenticatorUseCase: VerifyAuthenticatorUseCase, @@ -76,8 +74,9 @@ class EnrollmentViewModel( AuthenticatorType.RECOVERY_CODE, AuthenticatorType.PUSH, AuthenticatorType.TOTP -> { - if (startDefaultEnrollment) + if (startDefaultEnrollment) { startEnrollment(authenticatorType) + } } AuthenticatorType.EMAIL -> { @@ -130,7 +129,8 @@ class EnrollmentViewModel( EnrollmentUiState( uiError = UiError( error, - onRetry = { startEnrollment(authenticatorType, input) }) + onRetry = { startEnrollment(authenticatorType, input) } + ) ) } } @@ -179,7 +179,8 @@ class EnrollmentViewModel( else -> { _uiState.update { it.copy( - verifyingAuthenticator = false, uiError = UiError( + verifyingAuthenticator = false, + uiError = UiError( error = error, onRetry = { verifyWithOtp( @@ -188,7 +189,8 @@ class EnrollmentViewModel( authSession ) } - )) + ) + ) } } } @@ -196,7 +198,6 @@ class EnrollmentViewModel( } } - fun verifyWithoutOtp( authenticationMethodId: String, authSession: String @@ -227,7 +228,8 @@ class EnrollmentViewModel( uiError = UiError( error = error, onRetry = { verifyWithoutOtp(authenticationMethodId, authSession) } - )) + ) + ) } } } @@ -246,4 +248,3 @@ class EnrollmentViewModel( } } } - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Color.kt b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Color.kt index 1d95fa8..84bb22a 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Color.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Color.kt @@ -2,7 +2,6 @@ package com.auth0.universalcomponents.theme import androidx.compose.ui.graphics.Color - /** * Data class representing the Auth0 color scheme with semantic and Material3 bridge colors. * diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Dimensions.kt b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Dimensions.kt index ae47139..b9d5777 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Dimensions.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Dimensions.kt @@ -44,5 +44,4 @@ data class Auth0Dimensions( } } - internal val BASE_DIMEN_VALUE = 4.dp diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Theme.kt b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Theme.kt index 80b1a3b..518ad1f 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Theme.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Auth0Theme.kt @@ -79,19 +79,24 @@ object Auth0Theme { ) val colors: Auth0Color - @Composable @ReadOnlyComposable get() = LocalAuth0Theme.current.colors + @Composable @ReadOnlyComposable + get() = LocalAuth0Theme.current.colors val typography: Auth0Typography - @Composable @ReadOnlyComposable get() = LocalAuth0Theme.current.typography + @Composable @ReadOnlyComposable + get() = LocalAuth0Theme.current.typography val shapes: Auth0Shapes - @Composable @ReadOnlyComposable get() = LocalAuth0Theme.current.shapes + @Composable @ReadOnlyComposable + get() = LocalAuth0Theme.current.shapes val dimensions: Auth0Dimensions - @Composable @ReadOnlyComposable get() = LocalAuth0Theme.current.dimensions + @Composable @ReadOnlyComposable + get() = LocalAuth0Theme.current.dimensions val sizes: Auth0Sizes - @Composable @ReadOnlyComposable get() = LocalAuth0Theme.current.sizes + @Composable @ReadOnlyComposable + get() = LocalAuth0Theme.current.sizes } /** @@ -230,7 +235,7 @@ private fun Auth0Typography.toMaterial3Typography(): Typography { return Typography( displayLarge = this.displayLarge, displayMedium = this.displayMedium, - displaySmall = this.display, // Auth0's "display" -> Material3's displaySmall + displaySmall = this.display, // Auth0's "display" -> Material3's displaySmall headlineLarge = this.titleLarge, headlineMedium = this.title, bodyMedium = this.body, diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Font.kt b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Font.kt index a6aa06d..82e6dfa 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/theme/Font.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/theme/Font.kt @@ -6,10 +6,9 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import com.auth0.universalcomponents.R - val interFamily = FontFamily( Font(R.font.inter, FontWeight.Normal), Font(R.font.inter, FontWeight.Medium), Font(R.font.inter, FontWeight.SemiBold), Font(R.font.inter_italic, FontWeight.Normal, FontStyle.Italic) -) \ No newline at end of file +) diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/token/DefaultTokenProvider.kt b/universal_components/src/main/java/com/auth0/universalcomponents/token/DefaultTokenProvider.kt index 0a34c2e..abbdec5 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/token/DefaultTokenProvider.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/token/DefaultTokenProvider.kt @@ -23,4 +23,4 @@ public class DefaultTokenProvider(private val credentialsManager: BaseCredential ): APICredentials { return credentialsManager.awaitApiCredentials(audience, scope) } -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/token/TokenProvider.kt b/universal_components/src/main/java/com/auth0/universalcomponents/token/TokenProvider.kt index 427d694..752ff3c 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/token/TokenProvider.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/token/TokenProvider.kt @@ -3,7 +3,6 @@ package com.auth0.universalcomponents.token import com.auth0.android.result.APICredentials import com.auth0.android.result.Credentials - interface TokenProvider { suspend fun fetchCredentials(): Credentials @@ -11,4 +10,4 @@ interface TokenProvider { suspend fun fetchApiCredentials(audience: String, scope: String? = null): APICredentials suspend fun saveApiCredentials(audience: String, credentials: APICredentials) -} \ No newline at end of file +} diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/utils/CredentialManagerUtil.kt b/universal_components/src/main/java/com/auth0/universalcomponents/utils/CredentialManagerUtil.kt index df45c04..ccc0e84 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/utils/CredentialManagerUtil.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/utils/CredentialManagerUtil.kt @@ -6,7 +6,6 @@ import androidx.credentials.CreatePublicKeyCredentialResponse import androidx.credentials.CredentialManager import com.auth0.universalcomponents.Auth0UniversalComponents - suspend fun createCredential( context: Context, authParamsJson: String @@ -19,4 +18,3 @@ suspend fun createCredential( ?: throw IllegalStateException("Unexpected credential response type: ${response::class.java.name}") return publicKeyResponse.registrationResponseJson } - diff --git a/universal_components/src/main/java/com/auth0/universalcomponents/utils/DateUtil.kt b/universal_components/src/main/java/com/auth0/universalcomponents/utils/DateUtil.kt index a2c5332..ad62ffe 100644 --- a/universal_components/src/main/java/com/auth0/universalcomponents/utils/DateUtil.kt +++ b/universal_components/src/main/java/com/auth0/universalcomponents/utils/DateUtil.kt @@ -4,7 +4,7 @@ import java.time.LocalDateTime import java.time.format.DateTimeFormatter object DateUtil { - + /** * Formats ISO8601 date string to M/dd/yy format */ @@ -16,4 +16,4 @@ object DateUtil { isoDate.take(10) } } -} \ No newline at end of file +} diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/ExampleUnitTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/ExampleUnitTest.kt index 4d4f491..0b9d58a 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/ExampleUnitTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.auth0.universalcomponents -import org.junit.Test - import org.junit.Assert.* +import org.junit.Test /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/TestData.kt b/universal_components/src/test/java/com/auth0/universalcomponents/TestData.kt index b3db8a3..e57fe25 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/TestData.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/TestData.kt @@ -7,35 +7,35 @@ import com.auth0.android.result.PhoneAuthenticationMethod import com.auth0.android.result.PushNotificationAuthenticationMethod import com.auth0.android.result.RecoveryCodeAuthenticationMethod import com.auth0.android.result.TotpAuthenticationMethod -import com.auth0.android.result.MfaEnrollmentChallenge as SdkMfaEnrollmentChallenge -import com.auth0.android.result.RecoveryCodeEnrollmentChallenge as SdkRecoveryCodeEnrollmentChallenge -import com.auth0.android.result.TotpEnrollmentChallenge as SdkTotpEnrollmentChallenge -import com.auth0.android.result.PasskeyEnrollmentChallenge as SdkPasskeyEnrollmentChallenge -import com.auth0.android.result.AuthnParamsPublicKey as SdkAuthnParamsPublicKey -import com.auth0.android.result.AuthenticatorSelection as SdkAuthenticatorSelection -import com.auth0.android.result.PubKeyCredParam as SdkPubKeyCredParam -import com.auth0.android.result.RelyingParty as SdkRelyingParty -import com.auth0.android.result.PasskeyUser as SdkPasskeyUser -import com.auth0.android.result.PasskeyAuthenticationMethod as SdkPasskeyAuthenticationMethod import com.auth0.universalcomponents.domain.model.AuthenticatorMethod import com.auth0.universalcomponents.domain.model.AuthenticatorType import com.auth0.universalcomponents.domain.model.PrimaryAuthenticator import com.auth0.universalcomponents.domain.model.SecondaryAuthenticator +import com.auth0.universalcomponents.domain.model.UserInfo +import java.util.Date +import com.auth0.android.result.AuthenticatorSelection as SdkAuthenticatorSelection +import com.auth0.android.result.AuthnParamsPublicKey as SdkAuthnParamsPublicKey +import com.auth0.android.result.MfaEnrollmentChallenge as SdkMfaEnrollmentChallenge +import com.auth0.android.result.PasskeyAuthenticationMethod as SdkPasskeyAuthenticationMethod +import com.auth0.android.result.PasskeyEnrollmentChallenge as SdkPasskeyEnrollmentChallenge +import com.auth0.android.result.PasskeyUser as SdkPasskeyUser +import com.auth0.android.result.PubKeyCredParam as SdkPubKeyCredParam +import com.auth0.android.result.RecoveryCodeEnrollmentChallenge as SdkRecoveryCodeEnrollmentChallenge +import com.auth0.android.result.RelyingParty as SdkRelyingParty +import com.auth0.android.result.TotpEnrollmentChallenge as SdkTotpEnrollmentChallenge +import com.auth0.universalcomponents.domain.model.AuthenticatorSelection as DomainAuthenticatorSelection +import com.auth0.universalcomponents.domain.model.AuthnParamsPublicKey as DomainAuthnParamsPublicKey +import com.auth0.universalcomponents.domain.model.ClientExtensionResults as DomainClientExtensionResults +import com.auth0.universalcomponents.domain.model.CredProps as DomainCredProps import com.auth0.universalcomponents.domain.model.MfaEnrollmentChallenge as DomainMfaEnrollmentChallenge -import com.auth0.universalcomponents.domain.model.RecoveryCodeEnrollmentChallenge as DomainRecoveryCodeEnrollmentChallenge -import com.auth0.universalcomponents.domain.model.TotpEnrollmentChallenge as DomainTotpEnrollmentChallenge import com.auth0.universalcomponents.domain.model.PasskeyEnrollmentChallenge as DomainPasskeyEnrollmentChallenge -import com.auth0.universalcomponents.domain.model.AuthnParamsPublicKey as DomainAuthnParamsPublicKey -import com.auth0.universalcomponents.domain.model.AuthenticatorSelection as DomainAuthenticatorSelection import com.auth0.universalcomponents.domain.model.PubKeyCredParam as DomainPubKeyCredParam -import com.auth0.universalcomponents.domain.model.RelyingParty as DomainRelyingParty -import com.auth0.universalcomponents.domain.model.User as DomainPasskeyUser import com.auth0.universalcomponents.domain.model.PublicKeyCredentials as DomainPublicKeyCredentials -import com.auth0.universalcomponents.domain.model.ClientExtensionResults as DomainClientExtensionResults -import com.auth0.universalcomponents.domain.model.CredProps as DomainCredProps import com.auth0.universalcomponents.domain.model.PublicKeyResponse as DomainPublicKeyResponse -import com.auth0.universalcomponents.domain.model.UserInfo -import java.util.Date +import com.auth0.universalcomponents.domain.model.RecoveryCodeEnrollmentChallenge as DomainRecoveryCodeEnrollmentChallenge +import com.auth0.universalcomponents.domain.model.RelyingParty as DomainRelyingParty +import com.auth0.universalcomponents.domain.model.TotpEnrollmentChallenge as DomainTotpEnrollmentChallenge +import com.auth0.universalcomponents.domain.model.User as DomainPasskeyUser object TestData { @@ -51,7 +51,6 @@ object TestData { val sampleFactorList = listOf(phoneFactor, totpFactor) - val phoneAuthMethod = PhoneAuthenticationMethod( id = "auth_phone_123", type = "phone", @@ -99,7 +98,6 @@ object TestData { name = "My Push Device" ) - val totpEnrollmentChallenge = SdkTotpEnrollmentChallenge( id = "totp_id_123", authSession = "totp_session_123", @@ -130,7 +128,6 @@ object TestData { authSession = "phone_session" ) - val domainTotpEnrollmentChallenge = DomainTotpEnrollmentChallenge( id = "totp_id_123", authSession = "totp_session_123", @@ -314,7 +311,6 @@ object TestData { name = "user@example.com" ) - val allEnrolledMethods = listOf( enrolledPhoneMethod, enrolledTotpMethod, @@ -329,7 +325,6 @@ object TestData { authSession = "session_totp_001" ) - val defaultPhoneEnrollmentResult = com.auth0.universalcomponents.domain.model.EnrollmentResult.DefaultEnrollment( challenge = domainPhoneEnrollmentChallenge, @@ -501,4 +496,4 @@ object TestData { ) ) ) -} \ No newline at end of file +} diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/data/FakeRequestImpl.kt b/universal_components/src/test/java/com/auth0/universalcomponents/data/FakeRequestImpl.kt index bf1fba8..1e9b19b 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/data/FakeRequestImpl.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/data/FakeRequestImpl.kt @@ -51,4 +51,4 @@ class FakeRequestImpl( ): Request = this override fun addParameters(parameters: Map): Request = this -} \ No newline at end of file +} diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/data/MyAccountProviderTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/data/MyAccountProviderTest.kt index b35ae61..69fab8d 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/data/MyAccountProviderTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/data/MyAccountProviderTest.kt @@ -24,7 +24,6 @@ class MyAccountProviderTest { @Before fun setup() { - mockkStatic(TextUtils::class) mockkStatic(Base64::class) every { TextUtils.isEmpty(any()) } answers { (firstArg()).isNullOrEmpty() } diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/data/TokenManagerTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/data/TokenManagerTest.kt index 82664c5..81ab1c6 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/data/TokenManagerTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/data/TokenManagerTest.kt @@ -33,7 +33,6 @@ class TokenManagerTest { @Before fun setup() { - mockkObject(Auth0UniversalComponents) mockTokenProvider = mockk() @@ -59,7 +58,6 @@ class TokenManagerTest { assertThat(instance1).isSameInstanceAs(instance2) } - @Test fun `getMyAccountAudience - returns correct audience format`() { val audience = tokenManager.getMyAccountAudience() @@ -73,7 +71,6 @@ class TokenManagerTest { assertThat(audience).isEqualTo("https://example.auth0.com/me/") } - @Test fun `fetchToken - no cached token - fetches from provider and returns access token`() = runTest { @@ -96,10 +93,10 @@ class TokenManagerTest { mockTokenProvider.fetchApiCredentials(testAudience, testScope) } returns TestData.validApiCredentials - //Fetching the first time + // Fetching the first time tokenManager.fetchToken(testAudience, testScope) - //Fetching token the second time + // Fetching token the second time val token = tokenManager.fetchToken(testAudience, testScope) assertThat(token).isEqualTo("valid_access_token_123") @@ -175,7 +172,6 @@ class TokenManagerTest { coVerify(exactly = 1) { mockTokenProvider.fetchApiCredentials(testAudience, scope2) } } - @Test fun `saveToken - saves token to cache - subsequent fetch returns cached token`() = runTest { tokenManager.saveToken(testAudience, testScope, TestData.validApiCredentials) @@ -257,7 +253,6 @@ class TokenManagerTest { } } - @Test fun `fetchToken - token expires at boundary - treats as expired and fetches new token`() = runTest { @@ -277,7 +272,6 @@ class TokenManagerTest { } } - @Test fun `fetchToken - concurrent requests for same token - handles thread-safe access`() = runTest { coEvery { @@ -302,7 +296,6 @@ class TokenManagerTest { assertThat(tokens.distinct()).hasSize(1) } - @Test fun `fetchToken - empty scope - fetches and caches token`() = runTest { val emptyScope = "" @@ -318,7 +311,6 @@ class TokenManagerTest { } } - @Test fun `saveToken - overwrites existing cached token - uses new token`() = runTest { tokenManager.saveToken(testAudience, testScope, TestData.validApiCredentials) @@ -353,7 +345,6 @@ class TokenManagerTest { } } - @Test fun `fetchToken - multiple audiences and scopes - maintains separate cache entries`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImplTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImplTest.kt index ace82ca..723c828 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImplTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/data/repository/MyAccountRepositoryImplTest.kt @@ -8,9 +8,6 @@ import com.auth0.android.result.EnrollmentChallenge import com.auth0.android.result.Factor import com.auth0.android.result.RecoveryCodeEnrollmentChallenge import com.auth0.android.result.TotpEnrollmentChallenge -import com.auth0.android.result.PasskeyEnrollmentChallenge as SdkPasskeyEnrollmentChallenge -import com.auth0.android.result.PasskeyAuthenticationMethod as SdkPasskeyAuthenticationMethod -import com.auth0.android.request.PublicKeyCredentials as SdkPublicKeyCredentials import com.auth0.universalcomponents.TestData import com.auth0.universalcomponents.data.FakeRequestImpl import com.auth0.universalcomponents.data.MyAccountProvider @@ -27,6 +24,9 @@ import org.junit.After import org.junit.Assert.assertThrows import org.junit.Before import org.junit.Test +import com.auth0.android.request.PublicKeyCredentials as SdkPublicKeyCredentials +import com.auth0.android.result.PasskeyAuthenticationMethod as SdkPasskeyAuthenticationMethod +import com.auth0.android.result.PasskeyEnrollmentChallenge as SdkPasskeyEnrollmentChallenge class MyAccountRepositoryImplTest { @@ -96,7 +96,6 @@ class MyAccountRepositoryImplTest { assertThat(result).isEmpty() } - @Test fun `getAuthenticatorMethods - valid access token - returns list of authentication methods`() = runTest { @@ -149,7 +148,6 @@ class MyAccountRepositoryImplTest { assertThat(result).isEmpty() } - @Test fun `deleteAuthenticationMethod - valid method ID and token - returns null successfully`() = runTest { @@ -172,7 +170,6 @@ class MyAccountRepositoryImplTest { val request = FakeRequestImpl(exception = expectedException) every { myAccountClient.deleteAuthenticationMethod(methodId) } returns request - val exception = assertThrows(Auth0Error::class.java) { runTest { repository.deleteAuthenticationMethod(methodId, scope) @@ -213,14 +210,15 @@ class MyAccountRepositoryImplTest { assertThat(exception.message).isEqualTo("Received error with code a0.sdk.internal_error.unknown") } - @Test fun `enrollPushNotification - valid access token - returns TotpEnrollmentChallenge`() = runTest { val scope = "scope:authentication_methods" val request = - FakeRequestImpl(response = TestData.pushEnrollmentChallenge) + FakeRequestImpl( + response = TestData.pushEnrollmentChallenge + ) every { myAccountClient.enrollPushNotification() } returns request val result = repository.enrollPushNotification(scope) @@ -238,14 +236,12 @@ class MyAccountRepositoryImplTest { FakeRequestImpl(exception = expectedException) every { myAccountClient.enrollPushNotification() } returns request - val exception = assertThrows(Auth0Error::class.java) { runTest { repository.enrollPushNotification(scope) } } assertThat(exception.message).isEqualTo("Received error with code a0.sdk.internal_error.unknown") - } @Test @@ -254,7 +250,9 @@ class MyAccountRepositoryImplTest { val scope = "scope:authentication_methods" val request = - FakeRequestImpl(response = TestData.recoveryCodeEnrollmentChallenge) + FakeRequestImpl( + response = TestData.recoveryCodeEnrollmentChallenge + ) every { myAccountClient.enrollRecoveryCode() } returns request val result = repository.enrollRecoveryCode(scope) @@ -272,7 +270,6 @@ class MyAccountRepositoryImplTest { FakeRequestImpl(exception = expectedException) every { myAccountClient.enrollRecoveryCode() } returns request - val exception = assertThrows(Auth0Error::class.java) { runTest { repository.enrollRecoveryCode(scope) @@ -282,7 +279,6 @@ class MyAccountRepositoryImplTest { assertThat(exception.message).isEqualTo("Received error with code a0.sdk.internal_error.unknown") } - @Test fun `enrollEmail - valid email and token - returns MfaEnrollmentChallenge`() = runTest { val email = "user@example.com" @@ -316,7 +312,6 @@ class MyAccountRepositoryImplTest { assertThat(exception.message).isEqualTo("Received error with code a0.sdk.internal_error.unknown") } - @Test fun `enrollPhone - valid phone number with SMS method - returns MfaEnrollmentChallenge`() = runTest { @@ -358,7 +353,6 @@ class MyAccountRepositoryImplTest { ) } returns request - val exception = assertThrows(Auth0Error::class.java) { runTest { repository.enrollPhone(phoneNumber, scope) @@ -368,7 +362,6 @@ class MyAccountRepositoryImplTest { assertThat(exception.message).isEqualTo("Received error with code a0.sdk.internal_error.unknown") } - @Test fun `verifyOtp - valid OTP code - returns verified AuthenticationMethod`() = runTest { val authMethodId = "auth_method_123" @@ -397,7 +390,7 @@ class MyAccountRepositoryImplTest { "title" to "Forbidden", "detail" to "invalid code" ) - val expectedException = MyAccountException(errorValues,500) + val expectedException = MyAccountException(errorValues, 500) val request = FakeRequestImpl(exception = expectedException) @@ -416,7 +409,6 @@ class MyAccountRepositoryImplTest { } assertThat(exception.message).isEqualTo("Forbidden") - } @Test @@ -446,7 +438,6 @@ class MyAccountRepositoryImplTest { assertThat(exception.message).isEqualTo("Received error with code a0.sdk.internal_error.unknown") } - @Test fun `verifyWithoutOtp - valid auth session - returns verified AuthenticationMethod`() = runTest { @@ -563,7 +554,6 @@ class MyAccountRepositoryImplTest { assertThat(exception.message).isEqualTo("The access token is invalid or has expired") } - @Test fun `verifyPasskey - valid credentials and challenge - returns AuthenticationMethod`() = runTest { val scope = "scope:authentication_methods" @@ -633,5 +623,4 @@ class MyAccountRepositoryImplTest { } assertThat(exception.message).isEqualTo("Invalid passkey credentials") } - } diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/DeleteAuthenticationMethodUseCaseTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/DeleteAuthenticationMethodUseCaseTest.kt index 1e3c855..3ea48ba 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/DeleteAuthenticationMethodUseCaseTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/DeleteAuthenticationMethodUseCaseTest.kt @@ -31,7 +31,6 @@ class DeleteAuthenticationMethodUseCaseTest { clearAllMocks() } - @Test fun `invoke - valid authentication method ID - returns Success with Unit`() = runTest { val authMethodId = "auth_method_123" @@ -131,4 +130,4 @@ class DeleteAuthenticationMethodUseCaseTest { ) } } -} \ No newline at end of file +} diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCaseTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCaseTest.kt index 8ece0e1..1dcf663 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCaseTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/EnrollAuthenticatorUseCaseTest.kt @@ -25,7 +25,6 @@ class EnrollAuthenticatorUseCaseTest { private val requiredScope = "create:me:authentication_methods" - @Before fun setup() { repository = mockk() @@ -39,7 +38,6 @@ class EnrollAuthenticatorUseCaseTest { clearAllMocks() } - @Test fun `invoke - TOTP with None input - returns Success with TotpEnrollment`() = runTest { val expectedChallenge = TestData.domainTotpEnrollmentChallenge @@ -145,7 +143,6 @@ class EnrollAuthenticatorUseCaseTest { } } - @Test fun `invoke - RECOVERY_CODE with None input - returns Success with RecoveryCodeEnrollment`() = runTest { @@ -267,7 +264,6 @@ class EnrollAuthenticatorUseCaseTest { } } - @Test fun `invoke - EMAIL repository throws NetworkError - returns Auth0Error with NetworkError`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnabledAuthenticatorMethodsUseCaseTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnabledAuthenticatorMethodsUseCaseTest.kt index 449f8d6..63423c3 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnabledAuthenticatorMethodsUseCaseTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnabledAuthenticatorMethodsUseCaseTest.kt @@ -38,7 +38,6 @@ class GetEnabledAuthenticatorMethodsUseCaseTest { clearAllMocks() } - @Test fun `invoke - multiple secondary factors with confirmed auth methods - returns secondary authenticators with confirmed true`() = runTest { @@ -303,7 +302,6 @@ class GetEnabledAuthenticatorMethodsUseCaseTest { coVerify(exactly = 1) { repository.getAuthenticatorMethods(requiredScopesAuthentication) } } - @Test fun `invoke - single passkey auth method present - returns primary authenticator with passkey`() = runTest { @@ -356,7 +354,6 @@ class GetEnabledAuthenticatorMethodsUseCaseTest { coVerify(exactly = 1) { repository.getAuthenticatorMethods(requiredScopesAuthentication) } } - @Test fun `invoke - mixed passkey primary and MFA secondary methods - returns both primary and secondary authenticators`() = runTest { @@ -391,7 +388,6 @@ class GetEnabledAuthenticatorMethodsUseCaseTest { coVerify(exactly = 1) { repository.getAuthenticatorMethods(requiredScopesAuthentication) } } - @Test fun `invoke - duplicate factor types in factors list - returns deduplicated secondary authenticators`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnrolledAuthenticatorsUseCaseTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnrolledAuthenticatorsUseCaseTest.kt index 5b26eb1..8f4e77f 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnrolledAuthenticatorsUseCaseTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/GetEnrolledAuthenticatorsUseCaseTest.kt @@ -36,7 +36,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { clearAllMocks() } - @Test fun `invoke - TOTP type with confirmed methods - returns filtered TOTP list`() = runTest { val totpMethod = TestData.totpAuthMethod @@ -122,7 +121,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { Truth.assertThat(enrolledMethods[0].name).isEqualTo("+15551234567") } - @Test fun `invoke - EMAIL type with confirmed methods - returns filtered EMAIL list`() = runTest { val emailMethod = TestData.emailAuthMethod @@ -146,7 +144,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { } } - @Test fun `invoke - PUSH type with confirmed methods - returns filtered PUSH list`() = runTest { val pushMethod = TestData.pushNotificationAuthMethod @@ -171,7 +168,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { } } - @Test fun `invoke - RECOVERY_CODE type with confirmed methods - returns filtered RECOVERY_CODE list`() = runTest { @@ -196,7 +192,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { } } - @Test fun `invoke - mixed types with TOTP filter - returns only confirmed TOTP methods`() = runTest { val totpMethod = TestData.totpAuthMethod @@ -255,7 +250,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { Truth.assertThat(enrolledMethods).isEmpty() } - @Test fun `invoke - repository throws NetworkError - returns Error with Auth0Error`() = runTest { val expectedError = Auth0Error.NetworkError( @@ -325,7 +319,6 @@ class GetEnrolledAuthenticatorsUseCaseTest { } } - @Test fun `invoke - PASSKEY type with single passkey - returns filtered PASSKEY list`() = runTest { val passkeyMethod = TestData.passkeyAuthMethod @@ -460,4 +453,4 @@ class GetEnrolledAuthenticatorsUseCaseTest { repository.getAuthenticatorMethods("read:me:authentication_methods") } } -} \ No newline at end of file +} diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCaseTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCaseTest.kt index 36ae798..64d4f2a 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCaseTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/domain/usecase/VerifyAuthenticatorUseCaseTest.kt @@ -24,7 +24,6 @@ class VerifyAuthenticatorUseCaseTest { private val requiredScope = "create:me:authentication_methods" - @Before fun setup() { repository = mockk() @@ -210,7 +209,6 @@ class VerifyAuthenticatorUseCaseTest { } } - @Test fun `invoke - WithoutOtp valid input - returns Success with AuthenticationMethod`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/helpers/TestDispatcherProvider.kt b/universal_components/src/test/java/com/auth0/universalcomponents/helpers/TestDispatcherProvider.kt index 96b5476..406cc68 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/helpers/TestDispatcherProvider.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/helpers/TestDispatcherProvider.kt @@ -2,8 +2,8 @@ package com.auth0.universalcomponents.helpers import com.auth0.universalcomponents.domain.DispatcherProvider import kotlinx.coroutines.CoroutineDispatcher -import kotlinx.coroutines.test.TestDispatcher import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.TestDispatcher /** * Test implementation of DispatcherProvider that returns TestDispatcher for all dispatchers. diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModelTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModelTest.kt index 7434fce..4c2c536 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModelTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/AuthenticatorMethodsViewModelTest.kt @@ -48,7 +48,6 @@ class AuthenticatorMethodsViewModelTest { clearAllMocks() } - @Test fun `initialization - uiState collected - starts with Loading state and automatically fetches authenticator methods`() = runTest { @@ -73,7 +72,6 @@ class AuthenticatorMethodsViewModelTest { job.cancel() } - @Test fun `fetchAuthenticatorMethods - successful response - emits Success state with correctly mapped secondary MFA authenticators`() = runTest { @@ -144,7 +142,6 @@ class AuthenticatorMethodsViewModelTest { job.cancel() } - @Test fun `fetchAuthenticatorMethods - successful response - emits Success state with correctly mapped primary authenticators`() = runTest { @@ -228,7 +225,6 @@ class AuthenticatorMethodsViewModelTest { job.cancel() } - @Test fun `fetchAuthenticatorMethods correctly maps both authenticator types`() = runTest { @@ -283,7 +279,6 @@ class AuthenticatorMethodsViewModelTest { job.cancel() } - @Test fun `fetchAuthenticatorMethods - network error - emits Error state with error and retry callback`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModelTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModelTest.kt index 4ba775c..b000983 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModelTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrolledAuthenticatorViewModelTest.kt @@ -55,7 +55,6 @@ class EnrolledAuthenticatorViewModelTest { clearAllMocks() } - @Test fun `initialization - uiState collected - starts with default state and automatically fetches enrolled authenticators`() = runTest { @@ -331,7 +330,6 @@ class EnrolledAuthenticatorViewModelTest { job.cancel() } - @Test fun `error state retry callback for fetch - invoked after error - triggers fetchEnrolledAuthenticators again and can succeed`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModelTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModelTest.kt index 46ecb6c..3497e04 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModelTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/EnrollmentViewModelTest.kt @@ -142,7 +142,6 @@ class EnrollmentViewModelTest { job.cancel() } - @Test fun `startEnrollment - TOTP with None input - emits EnrollmentChallengeSuccess event and updates state`() = runTest { @@ -415,7 +414,6 @@ class EnrollmentViewModelTest { job.cancel() } - @Test fun `verifyWithOtp - valid OTP - emits VerificationSuccess event and resets state`() = runTest { @@ -457,7 +455,9 @@ class EnrollmentViewModelTest { assertThat(state.uiError).isNull() val capturedInput = inputSlot.captured - assertThat(capturedInput).isInstanceOf(com.auth0.universalcomponents.domain.model.VerificationInput.WithOtp::class.java) + assertThat( + capturedInput + ).isInstanceOf(com.auth0.universalcomponents.domain.model.VerificationInput.WithOtp::class.java) val otpInput = capturedInput as com.auth0.universalcomponents.domain.model.VerificationInput.WithOtp assertThat(otpInput.authenticationMethodId).isEqualTo("auth_phone_001") @@ -494,7 +494,6 @@ class EnrollmentViewModelTest { verifyAuthenticatorUseCase(any()) } returns Result.Error(invalidOtpError) - viewModel.verifyWithOtp("auth_phone_001", "000000", "session_001") testDispatcher.scheduler.advanceUntilIdle() @@ -548,7 +547,6 @@ class EnrollmentViewModelTest { job.cancel() } - @Test fun `verifyWithoutOtp - valid verification - emits VerificationSuccess event and resets state`() = runTest { @@ -589,7 +587,9 @@ class EnrollmentViewModelTest { assertThat(state.uiError).isNull() val capturedInput = inputSlot.captured - assertThat(capturedInput).isInstanceOf(com.auth0.universalcomponents.domain.model.VerificationInput.WithoutOtp::class.java) + assertThat( + capturedInput + ).isInstanceOf(com.auth0.universalcomponents.domain.model.VerificationInput.WithoutOtp::class.java) val withoutOtpInput = capturedInput as com.auth0.universalcomponents.domain.model.VerificationInput.WithoutOtp assertThat(withoutOtpInput.authenticationMethodId).isEqualTo("auth_totp_001") @@ -640,7 +640,6 @@ class EnrollmentViewModelTest { job.cancel() } - @Test fun `error retry callback - startEnrollment retry - invokes startEnrollment again with same parameters`() = runTest { diff --git a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/PasskeyViewModelTest.kt b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/PasskeyViewModelTest.kt index 4d7deff..3d2d62b 100644 --- a/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/PasskeyViewModelTest.kt +++ b/universal_components/src/test/java/com/auth0/universalcomponents/presentation/viewmodel/PasskeyViewModelTest.kt @@ -98,7 +98,6 @@ class PasskeyViewModelTest { eventJob.cancel() } - @Test fun `enrollPasskey - calls enrollPasskey with correct scope and configuration`() = runTest { coEvery { myAccountRepository.enrollPasskey(any(), any(), any()) } returns TestData.domainPasskeyEnrollmentChallenge @@ -133,7 +132,6 @@ class PasskeyViewModelTest { } } - @Test fun `enrollPasskey - null userIdentity and connection - passes nulls to repository`() = runTest { val nullConfig = PasskeyConfiguration( @@ -163,7 +161,9 @@ class PasskeyViewModelTest { @Test fun `enrollPasskey - Auth0Error - emits Error state with retry callback`() = runTest { - coEvery { myAccountRepository.enrollPasskey(any(), any(), any()) } throws Auth0Error.NetworkError("Network failed", Exception()) + coEvery { + myAccountRepository.enrollPasskey(any(), any(), any()) + } throws Auth0Error.NetworkError("Network failed", Exception()) viewModel.enrollPasskey(fakeCredentialCreator) advanceUntilIdle() @@ -219,7 +219,6 @@ class PasskeyViewModelTest { assertThat((state as PasskeyUiState.Error).shouldRetry).isFalse() } - @Test fun `enrollPasskey - retry callback - calls repository again`() = runTest { var callCount = 0 @@ -238,11 +237,12 @@ class PasskeyViewModelTest { assertThat(callCount).isEqualTo(2) } - @Test fun `enrollPasskey - verifyPasskey throws error - emits Error state`() = runTest { coEvery { myAccountRepository.enrollPasskey(any(), any(), any()) } returns TestData.domainPasskeyEnrollmentChallenge - coEvery { myAccountRepository.verifyPasskey(any(), any(), any()) } throws Auth0Error.ServerError("Server error", 500, Exception()) + coEvery { + myAccountRepository.verifyPasskey(any(), any(), any()) + } throws Auth0Error.ServerError("Server error", 500, Exception()) viewModel.enrollPasskey(fakeCredentialCreator) advanceUntilIdle() @@ -253,7 +253,9 @@ class PasskeyViewModelTest { @Test fun `resetState - from Error state - transitions uiState back to Idle`() = runTest { - coEvery { myAccountRepository.enrollPasskey(any(), any(), any()) } throws Auth0Error.NetworkError("Network failed", Exception()) + coEvery { + myAccountRepository.enrollPasskey(any(), any(), any()) + } throws Auth0Error.NetworkError("Network failed", Exception()) viewModel.enrollPasskey(fakeCredentialCreator) advanceUntilIdle()