Merge pull request #3667 from element-hq/feature/bma/asyncActionConfirmingWithParam
AsyncAction confirming with param
This commit is contained in:
commit
e72567c4ac
52 changed files with 128 additions and 141 deletions
|
|
@ -51,7 +51,7 @@ class AccountDeactivationPresenter @Inject constructor(
|
||||||
action
|
action
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
action.value = AsyncAction.Confirming
|
action.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
AccountDeactivationEvents.CloseDialogs -> {
|
AccountDeactivationEvents.CloseDialogs -> {
|
||||||
action.value = AsyncAction.Uninitialized
|
action.value = AsyncAction.Uninitialized
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ open class AccountDeactivationStateProvider : PreviewParameterProvider<AccountDe
|
||||||
),
|
),
|
||||||
anAccountDeactivationState(
|
anAccountDeactivationState(
|
||||||
deactivateFormState = filledForm,
|
deactivateFormState = filledForm,
|
||||||
accountDeactivationAction = AsyncAction.Confirming,
|
accountDeactivationAction = AsyncAction.ConfirmingNoParams,
|
||||||
),
|
),
|
||||||
anAccountDeactivationState(
|
anAccountDeactivationState(
|
||||||
deactivateFormState = filledForm,
|
deactivateFormState = filledForm,
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ fun AccountDeactivationActionDialog(
|
||||||
when (state) {
|
when (state) {
|
||||||
AsyncAction.Uninitialized ->
|
AsyncAction.Uninitialized ->
|
||||||
Unit
|
Unit
|
||||||
AsyncAction.Confirming ->
|
is AsyncAction.Confirming ->
|
||||||
AccountDeactivationConfirmationDialog(
|
AccountDeactivationConfirmationDialog(
|
||||||
onSubmitClick = onConfirmClick,
|
onSubmitClick = onConfirmClick,
|
||||||
onDismiss = onDismissDialog
|
onDismiss = onDismissDialog
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ class AccountDeactivationPresenterTest {
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
||||||
val updatedState2 = awaitItem()
|
val updatedState2 = awaitItem()
|
||||||
assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading)
|
assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading)
|
||||||
|
|
@ -102,7 +102,7 @@ class AccountDeactivationPresenterTest {
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
||||||
val updatedState2 = awaitItem()
|
val updatedState2 = awaitItem()
|
||||||
assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading)
|
assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading)
|
||||||
|
|
@ -135,7 +135,7 @@ class AccountDeactivationPresenterTest {
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
initialState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(updatedState.accountDeactivationAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
updatedState.eventSink(AccountDeactivationEvents.DeactivateAccount(isRetry = false))
|
||||||
val updatedState2 = awaitItem()
|
val updatedState2 = awaitItem()
|
||||||
assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading)
|
assertThat(updatedState2.accountDeactivationAction).isEqualTo(AsyncAction.Loading)
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ class AccountDeactivationViewTest {
|
||||||
deactivateFormState = aDeactivateFormState(
|
deactivateFormState = aDeactivateFormState(
|
||||||
password = A_PASSWORD,
|
password = A_PASSWORD,
|
||||||
),
|
),
|
||||||
accountDeactivationAction = AsyncAction.Confirming,
|
accountDeactivationAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,8 @@ package io.element.android.features.invite.api.response
|
||||||
|
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import java.util.Optional
|
|
||||||
|
|
||||||
data class AcceptDeclineInviteState(
|
data class AcceptDeclineInviteState(
|
||||||
val invite: Optional<InviteData>,
|
|
||||||
val acceptAction: AsyncAction<RoomId>,
|
val acceptAction: AsyncAction<RoomId>,
|
||||||
val declineAction: AsyncAction<RoomId>,
|
val declineAction: AsyncAction<RoomId>,
|
||||||
val eventSink: (AcceptDeclineInviteEvents) -> Unit,
|
val eventSink: (AcceptDeclineInviteEvents) -> Unit,
|
||||||
|
|
|
||||||
|
|
@ -10,23 +10,20 @@ package io.element.android.features.invite.api.response
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import java.util.Optional
|
|
||||||
|
|
||||||
open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDeclineInviteState> {
|
open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDeclineInviteState> {
|
||||||
override val values: Sequence<AcceptDeclineInviteState>
|
override val values: Sequence<AcceptDeclineInviteState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
anAcceptDeclineInviteState(),
|
anAcceptDeclineInviteState(),
|
||||||
anAcceptDeclineInviteState(
|
anAcceptDeclineInviteState(
|
||||||
invite = Optional.of(
|
declineAction = ConfirmingDeclineInvite(
|
||||||
InviteData(RoomId("!room:matrix.org"), isDm = true, roomName = "Alice"),
|
InviteData(RoomId("!room:matrix.org"), isDm = true, roomName = "Alice")
|
||||||
),
|
),
|
||||||
declineAction = AsyncAction.Confirming,
|
|
||||||
),
|
),
|
||||||
anAcceptDeclineInviteState(
|
anAcceptDeclineInviteState(
|
||||||
invite = Optional.of(
|
declineAction = ConfirmingDeclineInvite(
|
||||||
InviteData(RoomId("!room:matrix.org"), isDm = false, roomName = "Some room"),
|
InviteData(RoomId("!room:matrix.org"), isDm = false, roomName = "Some room")
|
||||||
),
|
),
|
||||||
declineAction = AsyncAction.Confirming,
|
|
||||||
),
|
),
|
||||||
anAcceptDeclineInviteState(
|
anAcceptDeclineInviteState(
|
||||||
acceptAction = AsyncAction.Failure(Throwable("Whoops")),
|
acceptAction = AsyncAction.Failure(Throwable("Whoops")),
|
||||||
|
|
@ -38,12 +35,10 @@ open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDec
|
||||||
}
|
}
|
||||||
|
|
||||||
fun anAcceptDeclineInviteState(
|
fun anAcceptDeclineInviteState(
|
||||||
invite: Optional<InviteData> = Optional.empty(),
|
|
||||||
acceptAction: AsyncAction<RoomId> = AsyncAction.Uninitialized,
|
acceptAction: AsyncAction<RoomId> = AsyncAction.Uninitialized,
|
||||||
declineAction: AsyncAction<RoomId> = AsyncAction.Uninitialized,
|
declineAction: AsyncAction<RoomId> = AsyncAction.Uninitialized,
|
||||||
eventSink: (AcceptDeclineInviteEvents) -> Unit = {}
|
eventSink: (AcceptDeclineInviteEvents) -> Unit = {}
|
||||||
) = AcceptDeclineInviteState(
|
) = AcceptDeclineInviteState(
|
||||||
invite = invite,
|
|
||||||
acceptAction = acceptAction,
|
acceptAction = acceptAction,
|
||||||
declineAction = declineAction,
|
declineAction = declineAction,
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.invite.api.response
|
||||||
|
|
||||||
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
||||||
|
data class ConfirmingDeclineInvite(
|
||||||
|
val inviteData: InviteData,
|
||||||
|
) : AsyncAction.Confirming
|
||||||
|
|
@ -9,15 +9,13 @@ package io.element.android.features.invite.impl.response
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
import im.vector.app.features.analytics.plan.JoinedRoom
|
||||||
import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents
|
import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents
|
||||||
import io.element.android.features.invite.api.response.AcceptDeclineInviteState
|
import io.element.android.features.invite.api.response.AcceptDeclineInviteState
|
||||||
import io.element.android.features.invite.api.response.InviteData
|
import io.element.android.features.invite.api.response.ConfirmingDeclineInvite
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
|
|
@ -29,9 +27,7 @@ import io.element.android.libraries.matrix.api.room.join.JoinRoom
|
||||||
import io.element.android.libraries.push.api.notifications.NotificationCleaner
|
import io.element.android.libraries.push.api.notifications.NotificationCleaner
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.Optional
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.jvm.optionals.getOrNull
|
|
||||||
|
|
||||||
class AcceptDeclineInvitePresenter @Inject constructor(
|
class AcceptDeclineInvitePresenter @Inject constructor(
|
||||||
private val client: MatrixClient,
|
private val client: MatrixClient,
|
||||||
|
|
@ -43,35 +39,22 @@ class AcceptDeclineInvitePresenter @Inject constructor(
|
||||||
val localCoroutineScope = rememberCoroutineScope()
|
val localCoroutineScope = rememberCoroutineScope()
|
||||||
val acceptedAction: MutableState<AsyncAction<RoomId>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
|
val acceptedAction: MutableState<AsyncAction<RoomId>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
|
||||||
val declinedAction: MutableState<AsyncAction<RoomId>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
|
val declinedAction: MutableState<AsyncAction<RoomId>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
|
||||||
var currentInvite by remember {
|
|
||||||
mutableStateOf<Optional<InviteData>>(Optional.empty())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun handleEvents(event: AcceptDeclineInviteEvents) {
|
fun handleEvents(event: AcceptDeclineInviteEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is AcceptDeclineInviteEvents.AcceptInvite -> {
|
is AcceptDeclineInviteEvents.AcceptInvite -> {
|
||||||
// currentInvite is used to render the decline confirmation dialog
|
|
||||||
// and to reuse the roomId when the user confirm the rejection of the invitation.
|
|
||||||
// Just set it to empty here.
|
|
||||||
currentInvite = Optional.empty()
|
|
||||||
localCoroutineScope.acceptInvite(event.invite.roomId, acceptedAction)
|
localCoroutineScope.acceptInvite(event.invite.roomId, acceptedAction)
|
||||||
}
|
}
|
||||||
|
|
||||||
is AcceptDeclineInviteEvents.DeclineInvite -> {
|
is AcceptDeclineInviteEvents.DeclineInvite -> {
|
||||||
currentInvite = Optional.of(event.invite)
|
declinedAction.value = ConfirmingDeclineInvite(event.invite)
|
||||||
declinedAction.value = AsyncAction.Confirming
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite -> {
|
is InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite -> {
|
||||||
declinedAction.value = AsyncAction.Uninitialized
|
localCoroutineScope.declineInvite(event.roomId, declinedAction)
|
||||||
currentInvite.getOrNull()?.let {
|
|
||||||
localCoroutineScope.declineInvite(it.roomId, declinedAction)
|
|
||||||
}
|
|
||||||
currentInvite = Optional.empty()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is InternalAcceptDeclineInviteEvents.CancelDeclineInvite -> {
|
is InternalAcceptDeclineInviteEvents.CancelDeclineInvite -> {
|
||||||
currentInvite = Optional.empty()
|
|
||||||
declinedAction.value = AsyncAction.Uninitialized
|
declinedAction.value = AsyncAction.Uninitialized
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,7 +69,6 @@ class AcceptDeclineInvitePresenter @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
return AcceptDeclineInviteState(
|
return AcceptDeclineInviteState(
|
||||||
invite = currentInvite,
|
|
||||||
acceptAction = acceptedAction.value,
|
acceptAction = acceptedAction.value,
|
||||||
declineAction = declinedAction.value,
|
declineAction = declinedAction.value,
|
||||||
eventSink = ::handleEvents
|
eventSink = ::handleEvents
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import io.element.android.features.invite.api.response.AcceptDeclineInviteState
|
import io.element.android.features.invite.api.response.AcceptDeclineInviteState
|
||||||
import io.element.android.features.invite.api.response.AcceptDeclineInviteStateProvider
|
import io.element.android.features.invite.api.response.AcceptDeclineInviteStateProvider
|
||||||
|
import io.element.android.features.invite.api.response.ConfirmingDeclineInvite
|
||||||
import io.element.android.features.invite.api.response.InviteData
|
import io.element.android.features.invite.api.response.InviteData
|
||||||
import io.element.android.features.invite.impl.R
|
import io.element.android.features.invite.impl.R
|
||||||
import io.element.android.libraries.designsystem.components.async.AsyncActionView
|
import io.element.android.libraries.designsystem.components.async.AsyncActionView
|
||||||
|
|
@ -22,7 +23,6 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import kotlin.jvm.optionals.getOrNull
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AcceptDeclineInviteView(
|
fun AcceptDeclineInviteView(
|
||||||
|
|
@ -45,13 +45,13 @@ fun AcceptDeclineInviteView(
|
||||||
onErrorDismiss = {
|
onErrorDismiss = {
|
||||||
state.eventSink(InternalAcceptDeclineInviteEvents.DismissDeclineError)
|
state.eventSink(InternalAcceptDeclineInviteEvents.DismissDeclineError)
|
||||||
},
|
},
|
||||||
confirmationDialog = {
|
confirmationDialog = { confirming ->
|
||||||
val invite = state.invite.getOrNull()
|
// Note: confirming will always be of type ConfirmingDeclineInvite.
|
||||||
if (invite != null) {
|
if (confirming is ConfirmingDeclineInvite) {
|
||||||
DeclineConfirmationDialog(
|
DeclineConfirmationDialog(
|
||||||
invite = invite,
|
invite = confirming.inviteData,
|
||||||
onConfirmClick = {
|
onConfirmClick = {
|
||||||
state.eventSink(InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite)
|
state.eventSink(InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite(confirming.inviteData.roomId))
|
||||||
},
|
},
|
||||||
onDismissClick = {
|
onDismissClick = {
|
||||||
state.eventSink(InternalAcceptDeclineInviteEvents.CancelDeclineInvite)
|
state.eventSink(InternalAcceptDeclineInviteEvents.CancelDeclineInvite)
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,10 @@
|
||||||
package io.element.android.features.invite.impl.response
|
package io.element.android.features.invite.impl.response
|
||||||
|
|
||||||
import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents
|
import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
sealed interface InternalAcceptDeclineInviteEvents : AcceptDeclineInviteEvents {
|
sealed interface InternalAcceptDeclineInviteEvents : AcceptDeclineInviteEvents {
|
||||||
data object ConfirmDeclineInvite : InternalAcceptDeclineInviteEvents
|
data class ConfirmDeclineInvite(val roomId: RoomId) : InternalAcceptDeclineInviteEvents
|
||||||
data object CancelDeclineInvite : InternalAcceptDeclineInviteEvents
|
data object CancelDeclineInvite : InternalAcceptDeclineInviteEvents
|
||||||
data object DismissAcceptError : InternalAcceptDeclineInviteEvents
|
data object DismissAcceptError : InternalAcceptDeclineInviteEvents
|
||||||
data object DismissDeclineError : InternalAcceptDeclineInviteEvents
|
data object DismissDeclineError : InternalAcceptDeclineInviteEvents
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ package io.element.android.features.invite.impl.response
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
import im.vector.app.features.analytics.plan.JoinedRoom
|
||||||
import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents
|
import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents
|
||||||
|
import io.element.android.features.invite.api.response.ConfirmingDeclineInvite
|
||||||
import io.element.android.features.invite.api.response.InviteData
|
import io.element.android.features.invite.api.response.InviteData
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
|
|
@ -33,7 +34,6 @@ import io.element.android.tests.testutils.test
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.util.Optional
|
|
||||||
|
|
||||||
class AcceptDeclineInvitePresenterTest {
|
class AcceptDeclineInvitePresenterTest {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
|
|
@ -46,7 +46,6 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.acceptAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
assertThat(state.acceptAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
||||||
assertThat(state.declineAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
assertThat(state.declineAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
||||||
assertThat(state.invite).isEqualTo(Optional.empty<InviteData>())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -61,17 +60,13 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
AcceptDeclineInviteEvents.DeclineInvite(inviteData)
|
AcceptDeclineInviteEvents.DeclineInvite(inviteData)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(1)
|
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.invite).isEqualTo(Optional.of(inviteData))
|
assertThat(state.declineAction).isEqualTo(ConfirmingDeclineInvite(inviteData))
|
||||||
assertThat(state.declineAction).isInstanceOf(AsyncAction.Confirming::class.java)
|
|
||||||
state.eventSink(
|
state.eventSink(
|
||||||
InternalAcceptDeclineInviteEvents.CancelDeclineInvite
|
InternalAcceptDeclineInviteEvents.CancelDeclineInvite
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(1)
|
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.invite).isEqualTo(Optional.empty<InviteData>())
|
|
||||||
assertThat(state.declineAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
assertThat(state.declineAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -93,22 +88,20 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
AcceptDeclineInviteEvents.DeclineInvite(inviteData)
|
AcceptDeclineInviteEvents.DeclineInvite(inviteData)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(1)
|
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
|
assertThat(state.declineAction).isEqualTo(ConfirmingDeclineInvite(inviteData))
|
||||||
state.eventSink(
|
state.eventSink(
|
||||||
InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite
|
InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite(inviteData.roomId)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(2)
|
assertThat(awaitItem().declineAction.isLoading()).isTrue()
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.declineAction).isInstanceOf(AsyncAction.Failure::class.java)
|
assertThat(state.declineAction).isInstanceOf(AsyncAction.Failure::class.java)
|
||||||
state.eventSink(
|
state.eventSink(
|
||||||
InternalAcceptDeclineInviteEvents.DismissDeclineError
|
InternalAcceptDeclineInviteEvents.DismissDeclineError
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(1)
|
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.invite).isEqualTo(Optional.empty<InviteData>())
|
|
||||||
assertThat(state.declineAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
assertThat(state.declineAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
||||||
}
|
}
|
||||||
cancelAndConsumeRemainingEvents()
|
cancelAndConsumeRemainingEvents()
|
||||||
|
|
@ -141,13 +134,13 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
AcceptDeclineInviteEvents.DeclineInvite(inviteData)
|
AcceptDeclineInviteEvents.DeclineInvite(inviteData)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(1)
|
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
|
assertThat(state.declineAction).isEqualTo(ConfirmingDeclineInvite(inviteData))
|
||||||
state.eventSink(
|
state.eventSink(
|
||||||
InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite
|
InternalAcceptDeclineInviteEvents.ConfirmDeclineInvite(inviteData.roomId)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
skipItems(2)
|
assertThat(awaitItem().declineAction.isLoading()).isTrue()
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.declineAction).isInstanceOf(AsyncAction.Success::class.java)
|
assertThat(state.declineAction).isInstanceOf(AsyncAction.Success::class.java)
|
||||||
}
|
}
|
||||||
|
|
@ -173,7 +166,6 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.invite).isEqualTo(Optional.empty<InviteData>())
|
|
||||||
assertThat(state.acceptAction).isEqualTo(AsyncAction.Loading)
|
assertThat(state.acceptAction).isEqualTo(AsyncAction.Loading)
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
|
|
@ -183,7 +175,6 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.invite).isEqualTo(Optional.empty<InviteData>())
|
|
||||||
assertThat(state.acceptAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
assertThat(state.acceptAction).isInstanceOf(AsyncAction.Uninitialized::class.java)
|
||||||
}
|
}
|
||||||
cancelAndConsumeRemainingEvents()
|
cancelAndConsumeRemainingEvents()
|
||||||
|
|
@ -220,7 +211,6 @@ class AcceptDeclineInvitePresenterTest {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
assertThat(state.invite).isEqualTo(Optional.empty<InviteData>())
|
|
||||||
assertThat(state.acceptAction).isEqualTo(AsyncAction.Loading)
|
assertThat(state.acceptAction).isEqualTo(AsyncAction.Loading)
|
||||||
}
|
}
|
||||||
awaitItem().also { state ->
|
awaitItem().also { state ->
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ fun PinUnlockView(
|
||||||
latestOnSuccessLogout(state.signOutAction.data)
|
latestOnSuccessLogout(state.signOutAction.data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AsyncAction.Confirming,
|
is AsyncAction.Confirming,
|
||||||
is AsyncAction.Failure,
|
is AsyncAction.Failure,
|
||||||
AsyncAction.Uninitialized -> Unit
|
AsyncAction.Uninitialized -> Unit
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ private fun ColumnScope.Buttons(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AsyncAction.Uninitialized,
|
AsyncAction.Uninitialized,
|
||||||
AsyncAction.Confirming -> Unit
|
is AsyncAction.Confirming -> Unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ open class DirectLogoutStateProvider : PreviewParameterProvider<DirectLogoutStat
|
||||||
override val values: Sequence<DirectLogoutState>
|
override val values: Sequence<DirectLogoutState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aDirectLogoutState(),
|
aDirectLogoutState(),
|
||||||
aDirectLogoutState(logoutAction = AsyncAction.Confirming),
|
aDirectLogoutState(logoutAction = AsyncAction.ConfirmingNoParams),
|
||||||
aDirectLogoutState(logoutAction = AsyncAction.Loading),
|
aDirectLogoutState(logoutAction = AsyncAction.Loading),
|
||||||
aDirectLogoutState(logoutAction = AsyncAction.Failure(Exception("Error"))),
|
aDirectLogoutState(logoutAction = AsyncAction.Failure(Exception("Error"))),
|
||||||
aDirectLogoutState(logoutAction = AsyncAction.Success("success")),
|
aDirectLogoutState(logoutAction = AsyncAction.Success("success")),
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ class LogoutPresenter @Inject constructor(
|
||||||
if (logoutAction.value.isConfirming() || event.ignoreSdkError) {
|
if (logoutAction.value.isConfirming() || event.ignoreSdkError) {
|
||||||
localCoroutineScope.logout(logoutAction, event.ignoreSdkError)
|
localCoroutineScope.logout(logoutAction, event.ignoreSdkError)
|
||||||
} else {
|
} else {
|
||||||
logoutAction.value = AsyncAction.Confirming
|
logoutAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogoutEvents.CloseDialogs -> {
|
LogoutEvents.CloseDialogs -> {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ open class LogoutStateProvider : PreviewParameterProvider<LogoutState> {
|
||||||
aLogoutState(isLastDevice = true),
|
aLogoutState(isLastDevice = true),
|
||||||
aLogoutState(isLastDevice = false, backupUploadState = BackupUploadState.Uploading(66, 200)),
|
aLogoutState(isLastDevice = false, backupUploadState = BackupUploadState.Uploading(66, 200)),
|
||||||
aLogoutState(isLastDevice = true, backupUploadState = BackupUploadState.Done),
|
aLogoutState(isLastDevice = true, backupUploadState = BackupUploadState.Done),
|
||||||
aLogoutState(logoutAction = AsyncAction.Confirming),
|
aLogoutState(logoutAction = AsyncAction.ConfirmingNoParams),
|
||||||
aLogoutState(logoutAction = AsyncAction.Loading),
|
aLogoutState(logoutAction = AsyncAction.Loading),
|
||||||
aLogoutState(logoutAction = AsyncAction.Failure(Exception("Failed to logout"))),
|
aLogoutState(logoutAction = AsyncAction.Failure(Exception("Failed to logout"))),
|
||||||
aLogoutState(backupUploadState = BackupUploadState.SteadyException(SteadyStateException.Connection("No network"))),
|
aLogoutState(backupUploadState = BackupUploadState.SteadyException(SteadyStateException.Connection("No network"))),
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class DirectLogoutPresenter @Inject constructor(
|
||||||
if (logoutAction.value.isConfirming() || event.ignoreSdkError) {
|
if (logoutAction.value.isConfirming() || event.ignoreSdkError) {
|
||||||
localCoroutineScope.logout(logoutAction, event.ignoreSdkError)
|
localCoroutineScope.logout(logoutAction, event.ignoreSdkError)
|
||||||
} else {
|
} else {
|
||||||
logoutAction.value = AsyncAction.Confirming
|
logoutAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DirectLogoutEvents.CloseDialogs -> {
|
DirectLogoutEvents.CloseDialogs -> {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ fun LogoutActionDialog(
|
||||||
when (state) {
|
when (state) {
|
||||||
AsyncAction.Uninitialized ->
|
AsyncAction.Uninitialized ->
|
||||||
Unit
|
Unit
|
||||||
AsyncAction.Confirming ->
|
is AsyncAction.Confirming ->
|
||||||
LogoutConfirmationDialog(
|
LogoutConfirmationDialog(
|
||||||
onSubmitClick = onConfirmClick,
|
onSubmitClick = onConfirmClick,
|
||||||
onDismiss = onDismissDialog
|
onDismiss = onDismissDialog
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ class LogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
initialState.eventSink.invoke(LogoutEvents.CloseDialogs)
|
initialState.eventSink.invoke(LogoutEvents.CloseDialogs)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(finalState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
|
|
@ -123,7 +123,7 @@ class LogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
confirmationState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
confirmationState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
@ -148,7 +148,7 @@ class LogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
confirmationState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
confirmationState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
@ -180,7 +180,7 @@ class LogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
confirmationState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
confirmationState.eventSink.invoke(LogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ class LogoutViewTest {
|
||||||
val eventsRecorder = EventsRecorder<LogoutEvents>()
|
val eventsRecorder = EventsRecorder<LogoutEvents>()
|
||||||
rule.setLogoutView(
|
rule.setLogoutView(
|
||||||
aLogoutState(
|
aLogoutState(
|
||||||
logoutAction = AsyncAction.Confirming,
|
logoutAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ class DefaultDirectLogoutViewTest {
|
||||||
val eventsRecorder = EventsRecorder<DirectLogoutEvents>()
|
val eventsRecorder = EventsRecorder<DirectLogoutEvents>()
|
||||||
rule.setDefaultDirectLogoutView(
|
rule.setDefaultDirectLogoutView(
|
||||||
state = aDirectLogoutState(
|
state = aDirectLogoutState(
|
||||||
logoutAction = AsyncAction.Confirming,
|
logoutAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -49,7 +49,7 @@ class DefaultDirectLogoutViewTest {
|
||||||
val eventsRecorder = EventsRecorder<DirectLogoutEvents>()
|
val eventsRecorder = EventsRecorder<DirectLogoutEvents>()
|
||||||
rule.setDefaultDirectLogoutView(
|
rule.setDefaultDirectLogoutView(
|
||||||
state = aDirectLogoutState(
|
state = aDirectLogoutState(
|
||||||
logoutAction = AsyncAction.Confirming,
|
logoutAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -63,7 +63,7 @@ class DefaultDirectLogoutViewTest {
|
||||||
val eventsRecorder = EventsRecorder<DirectLogoutEvents>()
|
val eventsRecorder = EventsRecorder<DirectLogoutEvents>()
|
||||||
rule.setDefaultDirectLogoutView(
|
rule.setDefaultDirectLogoutView(
|
||||||
state = aDirectLogoutState(
|
state = aDirectLogoutState(
|
||||||
logoutAction = AsyncAction.Confirming,
|
logoutAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ class DirectLogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
initialState.eventSink.invoke(DirectLogoutEvents.CloseDialogs)
|
initialState.eventSink.invoke(DirectLogoutEvents.CloseDialogs)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(finalState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
|
|
@ -104,7 +104,7 @@ class DirectLogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
confirmationState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
confirmationState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
@ -129,7 +129,7 @@ class DirectLogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
confirmationState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
confirmationState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
@ -161,7 +161,7 @@ class DirectLogoutPresenterTest {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
initialState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val confirmationState = awaitItem()
|
val confirmationState = awaitItem()
|
||||||
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmationState.logoutAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
confirmationState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
confirmationState.eventSink.invoke(DirectLogoutEvents.Logout(ignoreSdkError = false))
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.logoutAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ class BlockedUsersPresenter @Inject constructor(
|
||||||
when (event) {
|
when (event) {
|
||||||
is BlockedUsersEvents.Unblock -> {
|
is BlockedUsersEvents.Unblock -> {
|
||||||
pendingUserToUnblock = event.userId
|
pendingUserToUnblock = event.userId
|
||||||
unblockUserAction.value = AsyncAction.Confirming
|
unblockUserAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
BlockedUsersEvents.ConfirmUnblock -> {
|
BlockedUsersEvents.ConfirmUnblock -> {
|
||||||
pendingUserToUnblock?.let {
|
pendingUserToUnblock?.let {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ class BlockedUsersStatePreviewProvider : PreviewParameterProvider<BlockedUsersSt
|
||||||
aBlockedUsersState(),
|
aBlockedUsersState(),
|
||||||
aBlockedUsersState(blockedUsers = aMatrixUserList().map { it.copy(displayName = null, avatarUrl = null) }),
|
aBlockedUsersState(blockedUsers = aMatrixUserList().map { it.copy(displayName = null, avatarUrl = null) }),
|
||||||
aBlockedUsersState(blockedUsers = emptyList()),
|
aBlockedUsersState(blockedUsers = emptyList()),
|
||||||
aBlockedUsersState(unblockUserAction = AsyncAction.Confirming),
|
aBlockedUsersState(unblockUserAction = AsyncAction.ConfirmingNoParams),
|
||||||
aBlockedUsersState(unblockUserAction = AsyncAction.Loading),
|
aBlockedUsersState(unblockUserAction = AsyncAction.Loading),
|
||||||
aBlockedUsersState(unblockUserAction = AsyncAction.Failure(Throwable("Failed to unblock user"))),
|
aBlockedUsersState(unblockUserAction = AsyncAction.Failure(Throwable("Failed to unblock user"))),
|
||||||
aBlockedUsersState(unblockUserAction = AsyncAction.Success(Unit)),
|
aBlockedUsersState(unblockUserAction = AsyncAction.Success(Unit)),
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ class BlockedUserViewTest {
|
||||||
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
|
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
|
||||||
rule.setBlockedUsersView(
|
rule.setBlockedUsersView(
|
||||||
aBlockedUsersState(
|
aBlockedUsersState(
|
||||||
unblockUserAction = AsyncAction.Confirming,
|
unblockUserAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -78,7 +78,7 @@ class BlockedUserViewTest {
|
||||||
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
|
val eventsRecorder = EventsRecorder<BlockedUsersEvents>()
|
||||||
rule.setBlockedUsersView(
|
rule.setBlockedUsersView(
|
||||||
aBlockedUsersState(
|
aBlockedUsersState(
|
||||||
unblockUserAction = AsyncAction.Confirming,
|
unblockUserAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ class RoomMembersModerationPresenter @Inject constructor(
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
selectedMember = event.roomMember
|
selectedMember = event.roomMember
|
||||||
if (event.roomMember.membership == RoomMembershipState.BAN && canBan()) {
|
if (event.roomMember.membership == RoomMembershipState.BAN && canBan()) {
|
||||||
unbanUserAsyncAction.value = AsyncAction.Confirming
|
unbanUserAsyncAction.value = AsyncAction.ConfirmingNoParams
|
||||||
} else {
|
} else {
|
||||||
moderationActions = buildList {
|
moderationActions = buildList {
|
||||||
add(ModerationAction.DisplayProfile(event.roomMember.userId))
|
add(ModerationAction.DisplayProfile(event.roomMember.userId))
|
||||||
|
|
@ -109,7 +109,7 @@ class RoomMembersModerationPresenter @Inject constructor(
|
||||||
coroutineScope.banUser(it.userId, banUserAsyncAction)
|
coroutineScope.banUser(it.userId, banUserAsyncAction)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
banUserAsyncAction.value = AsyncAction.Confirming
|
banUserAsyncAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is RoomMembersModerationEvents.UnbanUser -> {
|
is RoomMembersModerationEvents.UnbanUser -> {
|
||||||
|
|
@ -119,7 +119,7 @@ class RoomMembersModerationPresenter @Inject constructor(
|
||||||
coroutineScope.unbanUser(it.userId, unbanUserAsyncAction)
|
coroutineScope.unbanUser(it.userId, unbanUserAsyncAction)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
unbanUserAsyncAction.value = AsyncAction.Confirming
|
unbanUserAsyncAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is RoomMembersModerationEvents.Reset -> {
|
is RoomMembersModerationEvents.Reset -> {
|
||||||
|
|
|
||||||
|
|
@ -56,11 +56,11 @@ class RoomMembersModerationStatePreviewProvider : PreviewParameterProvider<RoomM
|
||||||
),
|
),
|
||||||
aRoomMembersModerationState(
|
aRoomMembersModerationState(
|
||||||
selectedRoomMember = anAlice(),
|
selectedRoomMember = anAlice(),
|
||||||
banUserAsyncAction = AsyncAction.Confirming,
|
banUserAsyncAction = AsyncAction.ConfirmingNoParams,
|
||||||
),
|
),
|
||||||
aRoomMembersModerationState(
|
aRoomMembersModerationState(
|
||||||
selectedRoomMember = anAlice(),
|
selectedRoomMember = anAlice(),
|
||||||
unbanUserAsyncAction = AsyncAction.Confirming,
|
unbanUserAsyncAction = AsyncAction.ConfirmingNoParams,
|
||||||
),
|
),
|
||||||
aRoomMembersModerationState(
|
aRoomMembersModerationState(
|
||||||
kickUserAsyncAction = AsyncAction.Success(Unit),
|
kickUserAsyncAction = AsyncAction.Success(Unit),
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ class RolesAndPermissionsPresenter @Inject constructor(
|
||||||
fun handleEvent(event: RolesAndPermissionsEvents) {
|
fun handleEvent(event: RolesAndPermissionsEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is RolesAndPermissionsEvents.ChangeOwnRole -> {
|
is RolesAndPermissionsEvents.ChangeOwnRole -> {
|
||||||
changeOwnRoleAction.value = AsyncAction.Confirming
|
changeOwnRoleAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
is RolesAndPermissionsEvents.CancelPendingAction -> {
|
is RolesAndPermissionsEvents.CancelPendingAction -> {
|
||||||
changeOwnRoleAction.value = AsyncAction.Uninitialized
|
changeOwnRoleAction.value = AsyncAction.Uninitialized
|
||||||
|
|
@ -77,7 +77,7 @@ class RolesAndPermissionsPresenter @Inject constructor(
|
||||||
is RolesAndPermissionsEvents.ResetPermissions -> if (resetPermissionsAction.value.isConfirming()) {
|
is RolesAndPermissionsEvents.ResetPermissions -> if (resetPermissionsAction.value.isConfirming()) {
|
||||||
coroutineScope.resetPermissions(resetPermissionsAction)
|
coroutineScope.resetPermissions(resetPermissionsAction)
|
||||||
} else {
|
} else {
|
||||||
resetPermissionsAction.value = AsyncAction.Confirming
|
resetPermissionsAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ class RolesAndPermissionsStateProvider : PreviewParameterProvider<RolesAndPermis
|
||||||
aRolesAndPermissionsState(
|
aRolesAndPermissionsState(
|
||||||
adminCount = 1,
|
adminCount = 1,
|
||||||
moderatorCount = 2,
|
moderatorCount = 2,
|
||||||
changeOwnRoleAction = AsyncAction.Confirming,
|
changeOwnRoleAction = AsyncAction.ConfirmingNoParams,
|
||||||
),
|
),
|
||||||
aRolesAndPermissionsState(
|
aRolesAndPermissionsState(
|
||||||
adminCount = 1,
|
adminCount = 1,
|
||||||
|
|
@ -33,7 +33,7 @@ class RolesAndPermissionsStateProvider : PreviewParameterProvider<RolesAndPermis
|
||||||
aRolesAndPermissionsState(
|
aRolesAndPermissionsState(
|
||||||
adminCount = 1,
|
adminCount = 1,
|
||||||
moderatorCount = 2,
|
moderatorCount = 2,
|
||||||
resetPermissionsAction = AsyncAction.Confirming,
|
resetPermissionsAction = AsyncAction.ConfirmingNoParams,
|
||||||
),
|
),
|
||||||
aRolesAndPermissionsState(
|
aRolesAndPermissionsState(
|
||||||
adminCount = 1,
|
adminCount = 1,
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ class ChangeRolesPresenter @AssistedInject constructor(
|
||||||
is ChangeRolesEvent.Save -> {
|
is ChangeRolesEvent.Save -> {
|
||||||
if (role == RoomMember.Role.ADMIN && selectedUsers != usersWithRole && !saveState.value.isConfirming()) {
|
if (role == RoomMember.Role.ADMIN && selectedUsers != usersWithRole && !saveState.value.isConfirming()) {
|
||||||
// Confirm adding admin
|
// Confirm adding admin
|
||||||
saveState.value = AsyncAction.Confirming
|
saveState.value = AsyncAction.ConfirmingNoParams
|
||||||
} else if (!saveState.value.isLoading()) {
|
} else if (!saveState.value.isLoading()) {
|
||||||
coroutineScope.save(usersWithRole.value, selectedUsers, saveState)
|
coroutineScope.save(usersWithRole.value, selectedUsers, saveState)
|
||||||
}
|
}
|
||||||
|
|
@ -145,7 +145,7 @@ class ChangeRolesPresenter @AssistedInject constructor(
|
||||||
is ChangeRolesEvent.Exit -> {
|
is ChangeRolesEvent.Exit -> {
|
||||||
exitState.value = if (exitState.value.isUninitialized() && hasPendingChanges) {
|
exitState.value = if (exitState.value.isUninitialized() && hasPendingChanges) {
|
||||||
// Has pending changes, confirm exit
|
// Has pending changes, confirm exit
|
||||||
AsyncAction.Confirming
|
AsyncAction.ConfirmingNoParams
|
||||||
} else {
|
} else {
|
||||||
// No pending changes, exit immediately
|
// No pending changes, exit immediately
|
||||||
AsyncAction.Success(Unit)
|
AsyncAction.Success(Unit)
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ class ChangeRolesStateProvider : PreviewParameterProvider<ChangeRolesState> {
|
||||||
searchResults = SearchBarResultState.Results(MembersByRole(aRoomMemberList().take(1).toImmutableList())),
|
searchResults = SearchBarResultState.Results(MembersByRole(aRoomMemberList().take(1).toImmutableList())),
|
||||||
selectedUsers = aMatrixUserList().take(1).toImmutableList(),
|
selectedUsers = aMatrixUserList().take(1).toImmutableList(),
|
||||||
),
|
),
|
||||||
aChangeRolesStateWithSelectedUsers().copy(exitState = AsyncAction.Confirming),
|
aChangeRolesStateWithSelectedUsers().copy(exitState = AsyncAction.ConfirmingNoParams),
|
||||||
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Confirming),
|
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.ConfirmingNoParams),
|
||||||
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Loading),
|
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Loading),
|
||||||
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Success(Unit)),
|
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Success(Unit)),
|
||||||
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Failure(Exception("boom"))),
|
aChangeRolesStateWithSelectedUsers().copy(savingState = AsyncAction.Failure(Exception("boom"))),
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ class ChangeRoomPermissionsPresenter @AssistedInject constructor(
|
||||||
confirmExitAction = if (!hasChanges || confirmExitAction.isConfirming()) {
|
confirmExitAction = if (!hasChanges || confirmExitAction.isConfirming()) {
|
||||||
AsyncAction.Success(Unit)
|
AsyncAction.Success(Unit)
|
||||||
} else {
|
} else {
|
||||||
AsyncAction.Confirming
|
AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is ChangeRoomPermissionsEvent.ResetPendingActions -> {
|
is ChangeRoomPermissionsEvent.ResetPendingActions -> {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,11 @@ class ChangeRoomPermissionsStatePreviewProvider : PreviewParameterProvider<Chang
|
||||||
hasChanges = true,
|
hasChanges = true,
|
||||||
saveAction = AsyncAction.Failure(IllegalStateException("Failed to save changes"))
|
saveAction = AsyncAction.Failure(IllegalStateException("Failed to save changes"))
|
||||||
),
|
),
|
||||||
aChangeRoomPermissionsState(section = ChangeRoomPermissionsSection.RoomDetails, hasChanges = true, confirmExitAction = AsyncAction.Confirming),
|
aChangeRoomPermissionsState(
|
||||||
|
section = ChangeRoomPermissionsSection.RoomDetails,
|
||||||
|
hasChanges = true,
|
||||||
|
confirmExitAction = AsyncAction.ConfirmingNoParams,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,7 @@ class RoomMembersModerationPresenterTest {
|
||||||
awaitItem().eventSink(RoomMembersModerationEvents.SelectRoomMember(selectedMember))
|
awaitItem().eventSink(RoomMembersModerationEvents.SelectRoomMember(selectedMember))
|
||||||
with(awaitItem()) {
|
with(awaitItem()) {
|
||||||
assertThat(selectedRoomMember).isNotNull()
|
assertThat(selectedRoomMember).isNotNull()
|
||||||
assertThat(unbanUserAsyncAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(unbanUserAsyncAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -193,7 +193,7 @@ class RoomMembersModerationPresenterTest {
|
||||||
awaitItem().eventSink(RoomMembersModerationEvents.SelectRoomMember(selectedMember))
|
awaitItem().eventSink(RoomMembersModerationEvents.SelectRoomMember(selectedMember))
|
||||||
awaitItem().eventSink(RoomMembersModerationEvents.BanUser)
|
awaitItem().eventSink(RoomMembersModerationEvents.BanUser)
|
||||||
val confirmingState = awaitItem()
|
val confirmingState = awaitItem()
|
||||||
assertThat(confirmingState.banUserAsyncAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmingState.banUserAsyncAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
|
|
||||||
// Confirm
|
// Confirm
|
||||||
confirmingState.eventSink(RoomMembersModerationEvents.BanUser)
|
confirmingState.eventSink(RoomMembersModerationEvents.BanUser)
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ class RoomMembersModerationViewTest {
|
||||||
val roomMember = anAlice()
|
val roomMember = anAlice()
|
||||||
val state = aRoomMembersModerationState(
|
val state = aRoomMembersModerationState(
|
||||||
selectedRoomMember = roomMember,
|
selectedRoomMember = roomMember,
|
||||||
banUserAsyncAction = AsyncAction.Confirming,
|
banUserAsyncAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
rule.setRoomMembersModerationView(
|
rule.setRoomMembersModerationView(
|
||||||
|
|
@ -147,7 +147,7 @@ class RoomMembersModerationViewTest {
|
||||||
val roomMember = anAlice()
|
val roomMember = anAlice()
|
||||||
val state = aRoomMembersModerationState(
|
val state = aRoomMembersModerationState(
|
||||||
selectedRoomMember = roomMember,
|
selectedRoomMember = roomMember,
|
||||||
banUserAsyncAction = AsyncAction.Confirming,
|
banUserAsyncAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
rule.setRoomMembersModerationView(
|
rule.setRoomMembersModerationView(
|
||||||
|
|
@ -164,7 +164,7 @@ class RoomMembersModerationViewTest {
|
||||||
val roomMember = anAlice()
|
val roomMember = anAlice()
|
||||||
val state = aRoomMembersModerationState(
|
val state = aRoomMembersModerationState(
|
||||||
selectedRoomMember = roomMember,
|
selectedRoomMember = roomMember,
|
||||||
unbanUserAsyncAction = AsyncAction.Confirming,
|
unbanUserAsyncAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
rule.setRoomMembersModerationView(
|
rule.setRoomMembersModerationView(
|
||||||
|
|
@ -181,7 +181,7 @@ class RoomMembersModerationViewTest {
|
||||||
val roomMember = anAlice()
|
val roomMember = anAlice()
|
||||||
val state = aRoomMembersModerationState(
|
val state = aRoomMembersModerationState(
|
||||||
selectedRoomMember = roomMember,
|
selectedRoomMember = roomMember,
|
||||||
unbanUserAsyncAction = AsyncAction.Confirming,
|
unbanUserAsyncAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
rule.setRoomMembersModerationView(
|
rule.setRoomMembersModerationView(
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class RolesAndPermissionPresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(RolesAndPermissionsEvents.ChangeOwnRole)
|
initialState.eventSink(RolesAndPermissionsEvents.ChangeOwnRole)
|
||||||
|
|
||||||
assertThat(awaitItem().changeOwnRoleAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(awaitItem().changeOwnRoleAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ class RolesAndPermissionsViewTest {
|
||||||
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
||||||
rule.setRolesAndPermissionsView(
|
rule.setRolesAndPermissionsView(
|
||||||
state = aRolesAndPermissionsState(
|
state = aRolesAndPermissionsState(
|
||||||
resetPermissionsAction = AsyncAction.Confirming,
|
resetPermissionsAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -111,7 +111,7 @@ class RolesAndPermissionsViewTest {
|
||||||
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
||||||
rule.setRolesAndPermissionsView(
|
rule.setRolesAndPermissionsView(
|
||||||
state = aRolesAndPermissionsState(
|
state = aRolesAndPermissionsState(
|
||||||
resetPermissionsAction = AsyncAction.Confirming,
|
resetPermissionsAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -124,7 +124,7 @@ class RolesAndPermissionsViewTest {
|
||||||
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
||||||
rule.setRolesAndPermissionsView(
|
rule.setRolesAndPermissionsView(
|
||||||
state = aRolesAndPermissionsState(
|
state = aRolesAndPermissionsState(
|
||||||
changeOwnRoleAction = AsyncAction.Confirming,
|
changeOwnRoleAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -138,7 +138,7 @@ class RolesAndPermissionsViewTest {
|
||||||
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
||||||
rule.setRolesAndPermissionsView(
|
rule.setRolesAndPermissionsView(
|
||||||
state = aRolesAndPermissionsState(
|
state = aRolesAndPermissionsState(
|
||||||
changeOwnRoleAction = AsyncAction.Confirming,
|
changeOwnRoleAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -152,7 +152,7 @@ class RolesAndPermissionsViewTest {
|
||||||
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
val recorder = EventsRecorder<RolesAndPermissionsEvents>()
|
||||||
rule.setRolesAndPermissionsView(
|
rule.setRolesAndPermissionsView(
|
||||||
state = aRolesAndPermissionsState(
|
state = aRolesAndPermissionsState(
|
||||||
changeOwnRoleAction = AsyncAction.Confirming,
|
changeOwnRoleAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,7 @@ class ChangeRolesPresenterTest {
|
||||||
|
|
||||||
awaitItem().eventSink(ChangeRolesEvent.Exit)
|
awaitItem().eventSink(ChangeRolesEvent.Exit)
|
||||||
val confirmingState = awaitItem()
|
val confirmingState = awaitItem()
|
||||||
assertThat(confirmingState.exitState).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmingState.exitState).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
|
|
||||||
confirmingState.eventSink(ChangeRolesEvent.CancelExit)
|
confirmingState.eventSink(ChangeRolesEvent.CancelExit)
|
||||||
assertThat(awaitItem().exitState).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(awaitItem().exitState).isEqualTo(AsyncAction.Uninitialized)
|
||||||
|
|
@ -257,7 +257,7 @@ class ChangeRolesPresenterTest {
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
|
|
||||||
updatedState.eventSink(ChangeRolesEvent.Exit)
|
updatedState.eventSink(ChangeRolesEvent.Exit)
|
||||||
assertThat(awaitItem().exitState).isEqualTo(AsyncAction.Confirming)
|
assertThat(awaitItem().exitState).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
|
|
||||||
updatedState.eventSink(ChangeRolesEvent.Exit)
|
updatedState.eventSink(ChangeRolesEvent.Exit)
|
||||||
assertThat(awaitItem().exitState).isEqualTo(AsyncAction.Success(Unit))
|
assertThat(awaitItem().exitState).isEqualTo(AsyncAction.Success(Unit))
|
||||||
|
|
@ -284,7 +284,7 @@ class ChangeRolesPresenterTest {
|
||||||
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
|
initialState.eventSink(ChangeRolesEvent.UserSelectionToggled(MatrixUser(A_USER_ID_2)))
|
||||||
awaitItem().eventSink(ChangeRolesEvent.Save)
|
awaitItem().eventSink(ChangeRolesEvent.Save)
|
||||||
val confirmingState = awaitItem()
|
val confirmingState = awaitItem()
|
||||||
assertThat(confirmingState.savingState).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmingState.savingState).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
|
|
||||||
confirmingState.eventSink(ChangeRolesEvent.Save)
|
confirmingState.eventSink(ChangeRolesEvent.Save)
|
||||||
assertThat(awaitItem().savingState).isEqualTo(AsyncAction.Success(Unit))
|
assertThat(awaitItem().savingState).isEqualTo(AsyncAction.Success(Unit))
|
||||||
|
|
@ -309,7 +309,7 @@ class ChangeRolesPresenterTest {
|
||||||
|
|
||||||
awaitItem().eventSink(ChangeRolesEvent.Save)
|
awaitItem().eventSink(ChangeRolesEvent.Save)
|
||||||
val confirmingState = awaitItem()
|
val confirmingState = awaitItem()
|
||||||
assertThat(confirmingState.savingState).isEqualTo(AsyncAction.Confirming)
|
assertThat(confirmingState.savingState).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
|
|
||||||
confirmingState.eventSink(ChangeRolesEvent.CancelSave)
|
confirmingState.eventSink(ChangeRolesEvent.CancelSave)
|
||||||
assertThat(awaitItem().savingState).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(awaitItem().savingState).isEqualTo(AsyncAction.Uninitialized)
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ class ChangeRolesViewTest {
|
||||||
rule.setChangeRolesContent(
|
rule.setChangeRolesContent(
|
||||||
state = aChangeRolesState(
|
state = aChangeRolesState(
|
||||||
isSearchActive = true,
|
isSearchActive = true,
|
||||||
exitState = AsyncAction.Confirming,
|
exitState = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -156,7 +156,7 @@ class ChangeRolesViewTest {
|
||||||
rule.setChangeRolesContent(
|
rule.setChangeRolesContent(
|
||||||
state = aChangeRolesState(
|
state = aChangeRolesState(
|
||||||
isSearchActive = true,
|
isSearchActive = true,
|
||||||
exitState = AsyncAction.Confirming,
|
exitState = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -173,7 +173,7 @@ class ChangeRolesViewTest {
|
||||||
state = aChangeRolesState(
|
state = aChangeRolesState(
|
||||||
role = RoomMember.Role.ADMIN,
|
role = RoomMember.Role.ADMIN,
|
||||||
isSearchActive = true,
|
isSearchActive = true,
|
||||||
savingState = AsyncAction.Confirming,
|
savingState = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -190,7 +190,7 @@ class ChangeRolesViewTest {
|
||||||
state = aChangeRolesState(
|
state = aChangeRolesState(
|
||||||
role = RoomMember.Role.ADMIN,
|
role = RoomMember.Role.ADMIN,
|
||||||
isSearchActive = true,
|
isSearchActive = true,
|
||||||
savingState = AsyncAction.Confirming,
|
savingState = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = eventsRecorder,
|
eventSink = eventsRecorder,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -267,7 +267,7 @@ class ChangeRoomPermissionsPresenterTest {
|
||||||
assertThat(awaitItem().hasChanges).isTrue()
|
assertThat(awaitItem().hasChanges).isTrue()
|
||||||
|
|
||||||
state.eventSink(ChangeRoomPermissionsEvent.Exit)
|
state.eventSink(ChangeRoomPermissionsEvent.Exit)
|
||||||
assertThat(awaitItem().confirmExitAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(awaitItem().confirmExitAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
|
|
||||||
state.eventSink(ChangeRoomPermissionsEvent.Exit)
|
state.eventSink(ChangeRoomPermissionsEvent.Exit)
|
||||||
assertThat(awaitItem().confirmExitAction).isEqualTo(AsyncAction.Success(Unit))
|
assertThat(awaitItem().confirmExitAction).isEqualTo(AsyncAction.Success(Unit))
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ class ChangeRoomPermissionsViewTest {
|
||||||
state = aChangeRoomPermissionsState(
|
state = aChangeRoomPermissionsState(
|
||||||
section = ChangeRoomPermissionsSection.RoomDetails,
|
section = ChangeRoomPermissionsSection.RoomDetails,
|
||||||
hasChanges = true,
|
hasChanges = true,
|
||||||
confirmExitAction = AsyncAction.Confirming,
|
confirmExitAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
eventsRecorder = recorder,
|
eventsRecorder = recorder,
|
||||||
|
|
@ -98,7 +98,7 @@ class ChangeRoomPermissionsViewTest {
|
||||||
state = aChangeRoomPermissionsState(
|
state = aChangeRoomPermissionsState(
|
||||||
section = ChangeRoomPermissionsSection.RoomDetails,
|
section = ChangeRoomPermissionsSection.RoomDetails,
|
||||||
hasChanges = true,
|
hasChanges = true,
|
||||||
confirmExitAction = AsyncAction.Confirming,
|
confirmExitAction = AsyncAction.ConfirmingNoParams,
|
||||||
eventSink = recorder,
|
eventSink = recorder,
|
||||||
),
|
),
|
||||||
eventsRecorder = recorder,
|
eventsRecorder = recorder,
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ class SecureBackupDisablePresenter @Inject constructor(
|
||||||
is SecureBackupDisableEvents.DisableBackup -> if (disableAction.value.isConfirming()) {
|
is SecureBackupDisableEvents.DisableBackup -> if (disableAction.value.isConfirming()) {
|
||||||
coroutineScope.disableBackup(disableAction)
|
coroutineScope.disableBackup(disableAction)
|
||||||
} else {
|
} else {
|
||||||
disableAction.value = AsyncAction.Confirming
|
disableAction.value = AsyncAction.ConfirmingNoParams
|
||||||
}
|
}
|
||||||
SecureBackupDisableEvents.DismissDialogs -> {
|
SecureBackupDisableEvents.DismissDialogs -> {
|
||||||
disableAction.value = AsyncAction.Uninitialized
|
disableAction.value = AsyncAction.Uninitialized
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ open class SecureBackupDisableStateProvider : PreviewParameterProvider<SecureBac
|
||||||
override val values: Sequence<SecureBackupDisableState>
|
override val values: Sequence<SecureBackupDisableState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aSecureBackupDisableState(),
|
aSecureBackupDisableState(),
|
||||||
aSecureBackupDisableState(disableAction = AsyncAction.Confirming),
|
aSecureBackupDisableState(disableAction = AsyncAction.ConfirmingNoParams),
|
||||||
aSecureBackupDisableState(disableAction = AsyncAction.Loading),
|
aSecureBackupDisableState(disableAction = AsyncAction.Loading),
|
||||||
aSecureBackupDisableState(disableAction = AsyncAction.Failure(Exception("Failed to disable"))),
|
aSecureBackupDisableState(disableAction = AsyncAction.Failure(Exception("Failed to disable"))),
|
||||||
// Add other states here
|
// Add other states here
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class SecureBackupDisablePresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
assertThat(state.disableAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(state.disableAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
initialState.eventSink(SecureBackupDisableEvents.DismissDialogs)
|
initialState.eventSink(SecureBackupDisableEvents.DismissDialogs)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.disableAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(finalState.disableAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
|
|
@ -64,7 +64,7 @@ class SecureBackupDisablePresenterTest {
|
||||||
assertThat(initialState.disableAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(initialState.disableAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
assertThat(state.disableAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(state.disableAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.disableAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.disableAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
@ -88,7 +88,7 @@ class SecureBackupDisablePresenterTest {
|
||||||
assertThat(initialState.disableAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(initialState.disableAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
assertThat(state.disableAction).isEqualTo(AsyncAction.Confirming)
|
assertThat(state.disableAction).isEqualTo(AsyncAction.ConfirmingNoParams)
|
||||||
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
initialState.eventSink(SecureBackupDisableEvents.DisableBackup)
|
||||||
val loadingState = awaitItem()
|
val loadingState = awaitItem()
|
||||||
assertThat(loadingState.disableAction).isInstanceOf(AsyncAction.Loading::class.java)
|
assertThat(loadingState.disableAction).isInstanceOf(AsyncAction.Loading::class.java)
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ fun VerifySelfSessionView(
|
||||||
latestOnSuccessLogout(state.signOutAction.data)
|
latestOnSuccessLogout(state.signOutAction.data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AsyncAction.Confirming,
|
is AsyncAction.Confirming,
|
||||||
is AsyncAction.Failure,
|
is AsyncAction.Failure,
|
||||||
AsyncAction.Uninitialized -> Unit
|
AsyncAction.Uninitialized -> Unit
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,9 @@ sealed interface AsyncAction<out T> {
|
||||||
/**
|
/**
|
||||||
* Represents an operation that is currently waiting for user confirmation.
|
* Represents an operation that is currently waiting for user confirmation.
|
||||||
*/
|
*/
|
||||||
data object Confirming : AsyncAction<Nothing>
|
interface Confirming : AsyncAction<Nothing>
|
||||||
|
|
||||||
|
data object ConfirmingNoParams : Confirming
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an operation that is currently ongoing.
|
* Represents an operation that is currently ongoing.
|
||||||
|
|
@ -70,7 +72,7 @@ sealed interface AsyncAction<out T> {
|
||||||
|
|
||||||
fun isUninitialized(): Boolean = this == Uninitialized
|
fun isUninitialized(): Boolean = this == Uninitialized
|
||||||
|
|
||||||
fun isConfirming(): Boolean = this == Confirming
|
fun isConfirming(): Boolean = this is Confirming
|
||||||
|
|
||||||
fun isLoading(): Boolean = this == Loading
|
fun isLoading(): Boolean = this == Loading
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ open class AsyncActionProvider : PreviewParameterProvider<AsyncAction<Unit>> {
|
||||||
override val values: Sequence<AsyncAction<Unit>>
|
override val values: Sequence<AsyncAction<Unit>>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
AsyncAction.Uninitialized,
|
AsyncAction.Uninitialized,
|
||||||
AsyncAction.Confirming,
|
AsyncAction.ConfirmingNoParams,
|
||||||
AsyncAction.Loading,
|
AsyncAction.Loading,
|
||||||
AsyncAction.Failure(Exception("An error occurred")),
|
AsyncAction.Failure(Exception("An error occurred")),
|
||||||
AsyncAction.Success(Unit),
|
AsyncAction.Success(Unit),
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ fun <T> AsyncActionView(
|
||||||
async: AsyncAction<T>,
|
async: AsyncAction<T>,
|
||||||
onSuccess: (T) -> Unit,
|
onSuccess: (T) -> Unit,
|
||||||
onErrorDismiss: () -> Unit,
|
onErrorDismiss: () -> Unit,
|
||||||
confirmationDialog: @Composable () -> Unit = { },
|
confirmationDialog: @Composable (AsyncAction.Confirming) -> Unit = { },
|
||||||
progressDialog: @Composable () -> Unit = { AsyncActionViewDefaults.ProgressDialog() },
|
progressDialog: @Composable () -> Unit = { AsyncActionViewDefaults.ProgressDialog() },
|
||||||
errorTitle: @Composable (Throwable) -> String = { ErrorDialogDefaults.title },
|
errorTitle: @Composable (Throwable) -> String = { ErrorDialogDefaults.title },
|
||||||
errorMessage: @Composable (Throwable) -> String = { it.message ?: it.toString() },
|
errorMessage: @Composable (Throwable) -> String = { it.message ?: it.toString() },
|
||||||
|
|
@ -42,7 +42,7 @@ fun <T> AsyncActionView(
|
||||||
) {
|
) {
|
||||||
when (async) {
|
when (async) {
|
||||||
AsyncAction.Uninitialized -> Unit
|
AsyncAction.Uninitialized -> Unit
|
||||||
AsyncAction.Confirming -> confirmationDialog()
|
is AsyncAction.Confirming -> confirmationDialog(async)
|
||||||
is AsyncAction.Loading -> progressDialog()
|
is AsyncAction.Loading -> progressDialog()
|
||||||
is AsyncAction.Failure -> {
|
is AsyncAction.Failure -> {
|
||||||
if (onRetry == null) {
|
if (onRetry == null) {
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,15 @@ import io.element.android.libraries.matrix.api.room.InvitedRoom
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
|
import io.element.android.tests.testutils.simulateLongTask
|
||||||
|
|
||||||
class FakeInvitedRoom(
|
class FakeInvitedRoom(
|
||||||
override val sessionId: SessionId = A_SESSION_ID,
|
override val sessionId: SessionId = A_SESSION_ID,
|
||||||
override val roomId: RoomId = A_ROOM_ID,
|
override val roomId: RoomId = A_ROOM_ID,
|
||||||
private val declineInviteResult: () -> Result<Unit> = { lambdaError() }
|
private val declineInviteResult: () -> Result<Unit> = { lambdaError() }
|
||||||
) : InvitedRoom {
|
) : InvitedRoom {
|
||||||
override suspend fun declineInvite(): Result<Unit> {
|
override suspend fun declineInvite(): Result<Unit> = simulateLongTask {
|
||||||
return declineInviteResult()
|
declineInviteResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun close() = Unit
|
override fun close() = Unit
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ private fun ColumnScope.TroubleshootTestView(
|
||||||
private fun ColumnScope.TroubleshootNotificationsContent(state: TroubleshootNotificationsState) {
|
private fun ColumnScope.TroubleshootNotificationsContent(state: TroubleshootNotificationsState) {
|
||||||
when (state.testSuiteState.mainState) {
|
when (state.testSuiteState.mainState) {
|
||||||
AsyncAction.Loading,
|
AsyncAction.Loading,
|
||||||
AsyncAction.Confirming,
|
is AsyncAction.Confirming,
|
||||||
is AsyncAction.Success,
|
is AsyncAction.Success,
|
||||||
is AsyncAction.Failure -> {
|
is AsyncAction.Failure -> {
|
||||||
TestSuiteView(
|
TestSuiteView(
|
||||||
|
|
@ -150,7 +150,7 @@ private fun ColumnScope.TroubleshootNotificationsContent(state: TroubleshootNoti
|
||||||
})
|
})
|
||||||
RunTestButton(state = state)
|
RunTestButton(state = state)
|
||||||
}
|
}
|
||||||
AsyncAction.Confirming -> {
|
is AsyncAction.Confirming -> {
|
||||||
ListItem(headlineContent = {
|
ListItem(headlineContent = {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(id = R.string.troubleshoot_notifications_screen_waiting)
|
text = stringResource(id = R.string.troubleshoot_notifications_screen_waiting)
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ fun List<NotificationTroubleshootTestState>.computeMainState(): AsyncAction<Unit
|
||||||
isRunning -> AsyncAction.Loading
|
isRunning -> AsyncAction.Loading
|
||||||
else -> {
|
else -> {
|
||||||
if (any { it.status is NotificationTroubleshootTestState.Status.WaitingForUser }) {
|
if (any { it.status is NotificationTroubleshootTestState.Status.WaitingForUser }) {
|
||||||
AsyncAction.Confirming
|
AsyncAction.ConfirmingNoParams
|
||||||
} else if (any { it.status is NotificationTroubleshootTestState.Status.Failure }) {
|
} else if (any { it.status is NotificationTroubleshootTestState.Status.Failure }) {
|
||||||
AsyncAction.Failure(Exception("Some tests failed"))
|
AsyncAction.Failure(Exception("Some tests failed"))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue