ResolveVerifiedUserSendFailureEvent -> ResolveVerifiedUserSendFailureEven

This commit is contained in:
Benoit Marty
2026-01-27 09:58:44 +01:00
parent 56668377d4
commit 4d04808875
8 changed files with 40 additions and 40 deletions

View File

@@ -10,12 +10,12 @@ package io.element.android.features.messages.impl.crypto.sendfailure.resolve
import io.element.android.features.messages.impl.timeline.model.TimelineItem
sealed interface ResolveVerifiedUserSendFailureEvents {
sealed interface ResolveVerifiedUserSendFailureEvent {
data class ComputeForMessage(
val messageEvent: TimelineItem.Event,
) : ResolveVerifiedUserSendFailureEvents
) : ResolveVerifiedUserSendFailureEvent
data object ResolveAndResend : ResolveVerifiedUserSendFailureEvents
data object Retry : ResolveVerifiedUserSendFailureEvents
data object Dismiss : ResolveVerifiedUserSendFailureEvents
data object ResolveAndResend : ResolveVerifiedUserSendFailureEvent
data object Retry : ResolveVerifiedUserSendFailureEvent
data object Dismiss : ResolveVerifiedUserSendFailureEvent
}

View File

@@ -48,9 +48,9 @@ class ResolveVerifiedUserSendFailurePresenter(
}
val coroutineScope = rememberCoroutineScope()
fun handleEvent(event: ResolveVerifiedUserSendFailureEvents) {
fun handleEvent(event: ResolveVerifiedUserSendFailureEvent) {
when (event) {
is ResolveVerifiedUserSendFailureEvents.ComputeForMessage -> {
is ResolveVerifiedUserSendFailureEvent.ComputeForMessage -> {
val sendState = event.messageEvent.localSendState as? LocalEventSendState.Failed.VerifiedUser
val transactionId = event.messageEvent.transactionId
val sendHandle = event.messageEvent.sendhandle
@@ -65,10 +65,10 @@ class ResolveVerifiedUserSendFailurePresenter(
null
}
}
ResolveVerifiedUserSendFailureEvents.Dismiss -> {
ResolveVerifiedUserSendFailureEvent.Dismiss -> {
resolver = null
}
ResolveVerifiedUserSendFailureEvents.Retry -> {
ResolveVerifiedUserSendFailureEvent.Retry -> {
coroutineScope.launch {
resolver?.run {
runUpdatingState(retryAction) {
@@ -77,7 +77,7 @@ class ResolveVerifiedUserSendFailurePresenter(
}
}
}
ResolveVerifiedUserSendFailureEvents.ResolveAndResend -> {
ResolveVerifiedUserSendFailureEvent.ResolveAndResend -> {
coroutineScope.launch {
resolver?.run {
runUpdatingState(resolveAction) {

View File

@@ -15,5 +15,5 @@ data class ResolveVerifiedUserSendFailureState(
val verifiedUserSendFailure: VerifiedUserSendFailure,
val resolveAction: AsyncAction<Unit>,
val retryAction: AsyncAction<Unit>,
val eventSink: (ResolveVerifiedUserSendFailureEvents) -> Unit
val eventSink: (ResolveVerifiedUserSendFailureEvent) -> Unit
)

View File

@@ -29,7 +29,7 @@ fun aResolveVerifiedUserSendFailureState(
verifiedUserSendFailure: VerifiedUserSendFailure = VerifiedUserSendFailure.None,
resolveAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
retryAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
eventSink: (ResolveVerifiedUserSendFailureEvents) -> Unit = {}
eventSink: (ResolveVerifiedUserSendFailureEvent) -> Unit = {}
) = ResolveVerifiedUserSendFailureState(
verifiedUserSendFailure = verifiedUserSendFailure,
resolveAction = resolveAction,

View File

@@ -47,15 +47,15 @@ fun ResolveVerifiedUserSendFailureView(
var showSheet by remember { mutableStateOf(false) }
fun dismiss() {
state.eventSink(ResolveVerifiedUserSendFailureEvents.Dismiss)
state.eventSink(ResolveVerifiedUserSendFailureEvent.Dismiss)
}
fun onRetryClick() {
state.eventSink(ResolveVerifiedUserSendFailureEvents.Retry)
state.eventSink(ResolveVerifiedUserSendFailureEvent.Retry)
}
fun onResolveAndResendClick() {
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
LaunchedEffect(state.verifiedUserSendFailure) {

View File

@@ -25,7 +25,7 @@ import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import io.element.android.features.messages.impl.MessagesNavigator
import io.element.android.features.messages.impl.UserEventPermissions
import io.element.android.features.messages.impl.crypto.sendfailure.resolve.ResolveVerifiedUserSendFailureEvents
import io.element.android.features.messages.impl.crypto.sendfailure.resolve.ResolveVerifiedUserSendFailureEvent
import io.element.android.features.messages.impl.crypto.sendfailure.resolve.ResolveVerifiedUserSendFailureState
import io.element.android.features.messages.impl.timeline.components.MessageShieldData
import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactory
@@ -218,7 +218,7 @@ class TimelinePresenter(
TimelineEvent.HideShieldDialog -> messageShieldDialogData.value = null
is TimelineEvent.ShowShieldDialog -> messageShieldDialogData.value = event.messageShieldData
is TimelineEvent.ComputeVerifiedUserSendFailure -> {
resolveVerifiedUserSendFailureState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(event.event))
resolveVerifiedUserSendFailureState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(event.event))
}
is TimelineEvent.NavigateToPredecessorOrSuccessorRoom -> {
// Navigate to the predecessor or successor room

View File

@@ -47,7 +47,7 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val sentMessage = aMessageEvent()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(sentMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(sentMessage))
ensureAllEventsConsumed()
}
}
@@ -61,7 +61,7 @@ class ResolveVerifiedUserSendFailurePresenterTest {
)
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(sentMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(sentMessage))
ensureAllEventsConsumed()
}
}
@@ -75,7 +75,7 @@ class ResolveVerifiedUserSendFailurePresenterTest {
)
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
ensureAllEventsConsumed()
}
}
@@ -94,11 +94,11 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserHasUnsignedDeviceFailedMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.UnsignedDevice.FromYou)
state.eventSink(ResolveVerifiedUserSendFailureEvents.Dismiss)
state.eventSink(ResolveVerifiedUserSendFailureEvent.Dismiss)
}
skipItems(1)
awaitItem().also { state ->
@@ -122,12 +122,12 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserHasUnsignedDeviceFailedMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.UnsignedDevice.FromYou)
state.eventSink(ResolveVerifiedUserSendFailureEvents.Retry)
state.eventSink(ResolveVerifiedUserSendFailureEvent.Retry)
}
awaitItem().also { state ->
assertThat(state.retryAction).isEqualTo(AsyncAction.Loading)
@@ -158,12 +158,12 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserHasUnsignedDeviceFailedMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.UnsignedDevice.FromYou)
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
awaitItem().also { state ->
assertThat(state.resolveAction).isEqualTo(AsyncAction.Loading)
@@ -173,7 +173,7 @@ class ResolveVerifiedUserSendFailurePresenterTest {
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.UnsignedDevice.FromOther(A_USER_ID_2.value))
assertThat(state.resolveAction).isEqualTo(AsyncAction.Success(Unit))
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
skipItems(3)
@@ -201,12 +201,12 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserHasUnsignedDeviceFailedMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.UnsignedDevice.FromYou)
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
awaitItem().also { state ->
assertThat(state.resolveAction).isEqualTo(AsyncAction.Loading)
@@ -233,12 +233,12 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserChangedIdentityMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.ChangedIdentity(A_USER_ID.value))
state.eventSink(ResolveVerifiedUserSendFailureEvents.Retry)
state.eventSink(ResolveVerifiedUserSendFailureEvent.Retry)
}
awaitItem().also { state ->
assertThat(state.retryAction).isEqualTo(AsyncAction.Loading)
@@ -269,12 +269,12 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserChangedIdentityMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.ChangedIdentity(A_USER_ID.value))
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
awaitItem().also { state ->
assertThat(state.resolveAction).isEqualTo(AsyncAction.Loading)
@@ -284,7 +284,7 @@ class ResolveVerifiedUserSendFailurePresenterTest {
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.ChangedIdentity(A_USER_ID_2.value))
assertThat(state.resolveAction).isEqualTo(AsyncAction.Success(Unit))
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
skipItems(3)
@@ -312,12 +312,12 @@ class ResolveVerifiedUserSendFailurePresenterTest {
val failedMessage = aVerifiedUserChangedIdentityMessage()
val initialState = awaitItem()
assertThat(initialState.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.None)
initialState.eventSink(ResolveVerifiedUserSendFailureEvents.ComputeForMessage(failedMessage))
initialState.eventSink(ResolveVerifiedUserSendFailureEvent.ComputeForMessage(failedMessage))
skipItems(1)
awaitItem().also { state ->
assertThat(state.verifiedUserSendFailure).isEqualTo(VerifiedUserSendFailure.ChangedIdentity(A_USER_ID.value))
state.eventSink(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
state.eventSink(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
awaitItem().also { state ->
assertThat(state.resolveAction).isEqualTo(AsyncAction.Loading)

View File

@@ -27,7 +27,7 @@ class ResolveVerifiedUserSendFailureViewTest {
@Test
fun `clicking on resolve and resend emit the expected event`() {
val eventsRecorder = EventsRecorder<ResolveVerifiedUserSendFailureEvents>()
val eventsRecorder = EventsRecorder<ResolveVerifiedUserSendFailureEvent>()
rule.setResolveVerifiedUserSendFailureView(
state = aResolveVerifiedUserSendFailureState(
verifiedUserSendFailure = aChangedIdentitySendFailure(),
@@ -36,12 +36,12 @@ class ResolveVerifiedUserSendFailureViewTest {
)
rule.clickOn(res = CommonStrings.screen_resolve_send_failure_changed_identity_primary_button_title)
eventsRecorder.assertSingle(ResolveVerifiedUserSendFailureEvents.ResolveAndResend)
eventsRecorder.assertSingle(ResolveVerifiedUserSendFailureEvent.ResolveAndResend)
}
@Test
fun `clicking on retry emit the expected event`() {
val eventsRecorder = EventsRecorder<ResolveVerifiedUserSendFailureEvents>()
val eventsRecorder = EventsRecorder<ResolveVerifiedUserSendFailureEvent>()
rule.setResolveVerifiedUserSendFailureView(
state = aResolveVerifiedUserSendFailureState(
verifiedUserSendFailure = aChangedIdentitySendFailure(),
@@ -50,7 +50,7 @@ class ResolveVerifiedUserSendFailureViewTest {
)
rule.clickOn(res = CommonStrings.action_retry)
eventsRecorder.assertSingle(ResolveVerifiedUserSendFailureEvents.Retry)
eventsRecorder.assertSingle(ResolveVerifiedUserSendFailureEvent.Retry)
}
private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setResolveVerifiedUserSendFailureView(