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:
parent
f21e30f7c7
commit
a2646c56cf
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue