Skip to content

Commit 3222c3c

Browse files
authored
feat(authenticator): Add default error string for LimitExceededException (#182)
1 parent d8cd952 commit 3222c3c

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

authenticator/src/main/java/com/amplifyframework/ui/authenticator/AuthenticatorViewModel.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.amplifyframework.auth.cognito.exceptions.service.CodeMismatchExceptio
3030
import com.amplifyframework.auth.cognito.exceptions.service.CodeValidationException
3131
import com.amplifyframework.auth.cognito.exceptions.service.InvalidParameterException
3232
import com.amplifyframework.auth.cognito.exceptions.service.InvalidPasswordException
33+
import com.amplifyframework.auth.cognito.exceptions.service.LimitExceededException
3334
import com.amplifyframework.auth.cognito.exceptions.service.PasswordResetRequiredException
3435
import com.amplifyframework.auth.cognito.exceptions.service.UserNotConfirmedException
3536
import com.amplifyframework.auth.cognito.exceptions.service.UserNotFoundException
@@ -71,6 +72,7 @@ import com.amplifyframework.ui.authenticator.util.CodeSentMessage
7172
import com.amplifyframework.ui.authenticator.util.ExpiredCodeMessage
7273
import com.amplifyframework.ui.authenticator.util.InvalidConfigurationException
7374
import com.amplifyframework.ui.authenticator.util.InvalidLoginMessage
75+
import com.amplifyframework.ui.authenticator.util.LimitExceededMessage
7476
import com.amplifyframework.ui.authenticator.util.MissingConfigurationException
7577
import com.amplifyframework.ui.authenticator.util.NetworkErrorMessage
7678
import com.amplifyframework.ui.authenticator.util.PasswordResetMessage
@@ -560,6 +562,7 @@ internal class AuthenticatorViewModel(
560562
is CodeDeliveryFailureException -> sendMessage(CannotSendCodeMessage(error))
561563
is CodeExpiredException -> sendMessage(ExpiredCodeMessage(error))
562564
is CodeValidationException -> sendMessage(UnknownErrorMessage(error))
565+
is LimitExceededException -> sendMessage(LimitExceededMessage(error))
563566
is UnknownException -> {
564567
if (error.isConnectivityIssue()) {
565568
sendMessage(NetworkErrorMessage(error))

authenticator/src/main/java/com/amplifyframework/ui/authenticator/util/AuthenticatorMessage.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,10 @@ internal class ExpiredCodeMessage(
121121
internal class NetworkErrorMessage(
122122
override val cause: AuthException
123123
) : AuthenticatorMessageImpl(R.string.amplify_ui_authenticator_error_network), AuthenticatorMessage.Error
124+
125+
/**
126+
* User tried an action too many times.
127+
*/
128+
internal class LimitExceededMessage(
129+
override val cause: AuthException
130+
) : AuthenticatorMessageImpl(R.string.amplify_ui_authenticator_error_limit_exceeded), AuthenticatorMessage.Error

authenticator/src/main/res/values/errors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
<string name="amplify_ui_authenticator_error_send_code">Could not send confirmation code</string>
2222
<string name="amplify_ui_authenticator_error_expired_code">Code has expired</string>
2323
<string name="amplify_ui_authenticator_error_network">Please check your connectivity</string>
24+
<string name="amplify_ui_authenticator_error_limit_exceeded">You\'ve reached the request limit. Please try again later.</string>
2425
<string name="amplify_ui_authenticator_error_unknown">Sorry, something went wrong</string>
2526
</resources>

authenticator/src/test/java/com/amplifyframework/ui/authenticator/AuthenticatorViewModelTest.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import aws.smithy.kotlin.runtime.http.HttpException
2020
import com.amplifyframework.auth.AuthUserAttributeKey.email
2121
import com.amplifyframework.auth.AuthUserAttributeKey.emailVerified
2222
import com.amplifyframework.auth.MFAType
23+
import com.amplifyframework.auth.cognito.exceptions.service.LimitExceededException
2324
import com.amplifyframework.auth.exceptions.SessionExpiredException
2425
import com.amplifyframework.auth.exceptions.UnknownException
2526
import com.amplifyframework.auth.result.AuthResetPasswordResult
@@ -33,6 +34,7 @@ import com.amplifyframework.ui.authenticator.util.AmplifyResult.Error
3334
import com.amplifyframework.ui.authenticator.util.AmplifyResult.Success
3435
import com.amplifyframework.ui.authenticator.util.AuthConfigurationResult
3536
import com.amplifyframework.ui.authenticator.util.AuthProvider
37+
import com.amplifyframework.ui.authenticator.util.LimitExceededMessage
3638
import com.amplifyframework.ui.authenticator.util.NetworkErrorMessage
3739
import com.amplifyframework.ui.testing.CoroutineTestRule
3840
import io.kotest.matchers.shouldBe
@@ -490,6 +492,18 @@ class AuthenticatorViewModelTest {
490492
viewModel.confirmResetPassword("username", "password", "code")
491493
viewModel.currentStep shouldBe AuthenticatorStep.SignIn
492494
}
495+
496+
@Test
497+
fun `Password reset results in limit exceeded message`() = runTest {
498+
coEvery { authProvider.fetchAuthSession() } returns Success(mockAuthSession(isSignedIn = false))
499+
coEvery { authProvider.resetPassword(any()) } returns Error(LimitExceededException(null))
500+
501+
viewModel.start(mockAuthenticatorConfiguration(initialStep = AuthenticatorStep.PasswordReset))
502+
503+
viewModel.shouldEmitMessage<LimitExceededMessage> {
504+
viewModel.resetPassword("username")
505+
}
506+
}
493507
//endregion
494508
//region helpers
495509
private val AuthenticatorViewModel.currentStep: AuthenticatorStep

0 commit comments

Comments
 (0)