adding the logout all devices state to the reset state in preparation for the UI to take it into account

This commit is contained in:
Adam Brown 2022-05-30 17:29:19 +01:00
parent f21e30f7c7
commit a2646c56cf
4 changed files with 22 additions and 7 deletions

View File

@ -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.auth.registration.RegistrationWizard
import org.matrix.android.sdk.api.failure.isHomeserverUnavailable import org.matrix.android.sdk.api.failure.isHomeserverUnavailable
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.internal.auth.login.ResetCapabilities
import timber.log.Timber import timber.log.Timber
import java.util.UUID import java.util.UUID
import java.util.concurrent.CancellationException import java.util.concurrent.CancellationException
@ -443,11 +444,11 @@ class OnboardingViewModel @AssistedInject constructor(
setState { copy(isLoading = true) } setState { copy(isLoading = true) }
currentJob = viewModelScope.launch { currentJob = viewModelScope.launch {
runCatching { safeLoginWizard.resetPassword(action.email) }.fold( runCatching { safeLoginWizard.resetPassword(action.email) }.fold(
onSuccess = { onSuccess = { resetCapabilities ->
setState { setState {
copy( copy(
isLoading = false, isLoading = false,
resetState = ResetState(email = action.email, newPassword = action.newPassword) resetState = createResetState(action, resetCapabilities)
) )
} }
_viewEvents.post(OnboardingViewEvents.OnResetPasswordSendThreePidDone) _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() { private fun handleResetPasswordMailConfirmed() {
setState { copy(isLoading = true) } setState { copy(isLoading = true) }
currentJob = viewModelScope.launch { currentJob = viewModelScope.launch {

View File

@ -87,7 +87,8 @@ data class PersonalizationState(
@Parcelize @Parcelize
data class ResetState( data class ResetState(
val email: String? = null, val email: String? = null,
val newPassword: String? = null val newPassword: String? = null,
val supportsLogoutAllDevices: Boolean = false
) : Parcelable ) : Parcelable
@Parcelize @Parcelize

View File

@ -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.auth.registration.Stage
import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities 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_DISPLAY_NAME = "a display name"
private const val A_PICTURE_FILENAME = "a-picture.png" 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 val SELECTED_HOMESERVER_STATE = SelectedHomeserverState(preferredLoginMode = LoginMode.Password)
private const val AN_EMAIL = "hello@example.com" private const val AN_EMAIL = "hello@example.com"
private const val A_PASSWORD = "a-password" private const val A_PASSWORD = "a-password"
private val A_RESET_CAPABILITIES = ResetCapabilities(supportsLogoutAllDevices = true)
class OnboardingViewModelTest { class OnboardingViewModelTest {
@ -479,7 +481,7 @@ class OnboardingViewModelTest {
@Test @Test
fun `given can successfully reset password, when resetting password, then emits reset done event`() = runTest { fun `given can successfully reset password, when resetting password, then emits reset done event`() = runTest {
val test = viewModel.test() val test = viewModel.test()
fakeLoginWizard.givenResetPasswordSuccess(AN_EMAIL) fakeLoginWizard.givenResetPasswordSuccess(AN_EMAIL, A_RESET_CAPABILITIES)
fakeAuthenticationService.givenLoginWizard(fakeLoginWizard) fakeAuthenticationService.givenLoginWizard(fakeLoginWizard)
viewModel.handle(OnboardingAction.ResetPassword(email = AN_EMAIL, newPassword = A_PASSWORD)) viewModel.handle(OnboardingAction.ResetPassword(email = AN_EMAIL, newPassword = A_PASSWORD))
@ -488,7 +490,10 @@ class OnboardingViewModelTest {
.assertStatesChanges( .assertStatesChanges(
initialState, initialState,
{ copy(isLoading = true) }, { 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) .assertEvents(OnboardingViewEvents.OnResetPasswordSendThreePidDone)
.finish() .finish()

View File

@ -16,14 +16,16 @@
package im.vector.app.test.fakes package im.vector.app.test.fakes
import io.mockk.coEvery
import io.mockk.coJustRun import io.mockk.coJustRun
import io.mockk.mockk import io.mockk.mockk
import org.matrix.android.sdk.api.auth.login.LoginWizard import org.matrix.android.sdk.api.auth.login.LoginWizard
import org.matrix.android.sdk.internal.auth.login.ResetCapabilities
class FakeLoginWizard : LoginWizard by mockk() { class FakeLoginWizard : LoginWizard by mockk() {
fun givenResetPasswordSuccess(email: String) { fun givenResetPasswordSuccess(email: String, resetCapabilities: ResetCapabilities) {
coJustRun { resetPassword(email) } coEvery { resetPassword(email) } returns resetCapabilities
} }
fun givenConfirmResetPasswordSuccess(password: String) { fun givenConfirmResetPasswordSuccess(password: String) {