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.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 {

View File

@ -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

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.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()

View File

@ -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) {