From a2646c56cf6371f18d496399f2729e32818178db Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Mon, 30 May 2022 17:29:19 +0100 Subject: [PATCH] adding the logout all devices state to the reset state in preparation for the UI to take it into account --- .../app/features/onboarding/OnboardingViewModel.kt | 11 +++++++++-- .../app/features/onboarding/OnboardingViewState.kt | 3 ++- .../features/onboarding/OnboardingViewModelTest.kt | 9 +++++++-- .../java/im/vector/app/test/fakes/FakeLoginWizard.kt | 6 ++++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt index 50e68dd324..254bca2c7b 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt @@ -60,6 +60,7 @@ import org.matrix.android.sdk.api.auth.login.LoginWizard import org.matrix.android.sdk.api.auth.registration.RegistrationWizard import org.matrix.android.sdk.api.failure.isHomeserverUnavailable import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.internal.auth.login.ResetCapabilities import timber.log.Timber import java.util.UUID import java.util.concurrent.CancellationException @@ -443,11 +444,11 @@ class OnboardingViewModel @AssistedInject constructor( setState { copy(isLoading = true) } currentJob = viewModelScope.launch { runCatching { safeLoginWizard.resetPassword(action.email) }.fold( - onSuccess = { + onSuccess = { resetCapabilities -> setState { copy( isLoading = false, - resetState = ResetState(email = action.email, newPassword = action.newPassword) + resetState = createResetState(action, resetCapabilities) ) } _viewEvents.post(OnboardingViewEvents.OnResetPasswordSendThreePidDone) @@ -460,6 +461,12 @@ class OnboardingViewModel @AssistedInject constructor( } } + private fun createResetState(action: OnboardingAction.ResetPassword, it: ResetCapabilities) = ResetState( + email = action.email, + newPassword = action.newPassword, + supportsLogoutAllDevices = it.supportsLogoutAllDevices + ) + private fun handleResetPasswordMailConfirmed() { setState { copy(isLoading = true) } currentJob = viewModelScope.launch { diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt index 680d2192ed..93d5892bf1 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt @@ -87,7 +87,8 @@ data class PersonalizationState( @Parcelize data class ResetState( val email: String? = null, - val newPassword: String? = null + val newPassword: String? = null, + val supportsLogoutAllDevices: Boolean = false ) : Parcelable @Parcelize diff --git a/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt b/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt index c5d24c0ec3..3cefeb46be 100644 --- a/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt +++ b/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt @@ -52,6 +52,7 @@ import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig import org.matrix.android.sdk.api.auth.registration.Stage import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities +import org.matrix.android.sdk.internal.auth.login.ResetCapabilities private const val A_DISPLAY_NAME = "a display name" private const val A_PICTURE_FILENAME = "a-picture.png" @@ -67,6 +68,7 @@ private val A_HOMESERVER_CONFIG = HomeServerConnectionConfig(FakeUri().instance) private val SELECTED_HOMESERVER_STATE = SelectedHomeserverState(preferredLoginMode = LoginMode.Password) private const val AN_EMAIL = "hello@example.com" private const val A_PASSWORD = "a-password" +private val A_RESET_CAPABILITIES = ResetCapabilities(supportsLogoutAllDevices = true) class OnboardingViewModelTest { @@ -479,7 +481,7 @@ class OnboardingViewModelTest { @Test fun `given can successfully reset password, when resetting password, then emits reset done event`() = runTest { val test = viewModel.test() - fakeLoginWizard.givenResetPasswordSuccess(AN_EMAIL) + fakeLoginWizard.givenResetPasswordSuccess(AN_EMAIL, A_RESET_CAPABILITIES) fakeAuthenticationService.givenLoginWizard(fakeLoginWizard) viewModel.handle(OnboardingAction.ResetPassword(email = AN_EMAIL, newPassword = A_PASSWORD)) @@ -488,7 +490,10 @@ class OnboardingViewModelTest { .assertStatesChanges( initialState, { copy(isLoading = true) }, - { copy(isLoading = false, resetState = ResetState(AN_EMAIL, A_PASSWORD)) } + { + val resetState = ResetState(AN_EMAIL, A_PASSWORD, supportsLogoutAllDevices = A_RESET_CAPABILITIES.supportsLogoutAllDevices) + copy(isLoading = false, resetState = resetState) + } ) .assertEvents(OnboardingViewEvents.OnResetPasswordSendThreePidDone) .finish() diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeLoginWizard.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeLoginWizard.kt index 38bb75087c..c0f9f98f5f 100644 --- a/vector/src/test/java/im/vector/app/test/fakes/FakeLoginWizard.kt +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeLoginWizard.kt @@ -16,14 +16,16 @@ package im.vector.app.test.fakes +import io.mockk.coEvery import io.mockk.coJustRun import io.mockk.mockk import org.matrix.android.sdk.api.auth.login.LoginWizard +import org.matrix.android.sdk.internal.auth.login.ResetCapabilities class FakeLoginWizard : LoginWizard by mockk() { - fun givenResetPasswordSuccess(email: String) { - coJustRun { resetPassword(email) } + fun givenResetPasswordSuccess(email: String, resetCapabilities: ResetCapabilities) { + coEvery { resetPassword(email) } returns resetCapabilities } fun givenConfirmResetPasswordSuccess(password: String) {