From b0e3f818c3f83b6ccf2a93d58299b2b3849006e3 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 20 Jun 2025 16:36:01 +0200 Subject: [PATCH 1/4] change (accept invite) : map Unknown error to AcceptInvite.Failures.InvalidInvite --- .../android/features/invite/impl/AcceptInvite.kt | 16 ++++++++++++++++ .../features/joinroom/impl/JoinRoomPresenter.kt | 9 +-------- .../features/joinroom/impl/JoinRoomState.kt | 7 ++----- .../joinroom/impl/JoinRoomStateProvider.kt | 15 +++++++++++++-- .../roomlist/impl/RoomListStateProvider.kt | 14 +++++++++++++- .../libraries/matrix/api/room/join/JoinRoom.kt | 4 ++++ .../matrix/impl/room/join/DefaultJoinRoom.kt | 12 ++++++++++++ 7 files changed, 61 insertions(+), 16 deletions(-) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt index c4d520a6b8..716cd7f907 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt @@ -10,16 +10,23 @@ package io.element.android.features.invite.impl import com.squareup.anvil.annotations.ContributesBinding import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.features.invite.api.SeenInvitesStore +import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias +import io.element.android.libraries.matrix.api.exception.ClientException +import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.push.api.notifications.NotificationCleaner import javax.inject.Inject interface AcceptInvite { suspend operator fun invoke(roomId: RoomId): Result + + sealed class Failures : Exception() { + data object InvalidInvite : Failures() + } } @ContributesBinding(SessionScope::class) @@ -37,6 +44,15 @@ class DefaultAcceptInvite @Inject constructor( ).onSuccess { notificationCleaner.clearMembershipNotificationForRoom(client.sessionId, roomId) seenInvitesStore.markAsUnSeen(roomId) + }.mapFailure { + if (it is ClientException.MatrixApi) { + when (it.kind) { + ErrorKind.Unknown -> AcceptInvite.Failures.InvalidInvite + else -> it + } + } else { + it + } }.map { roomId } } } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 7d3b64f6f4..e8514ac4a5 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -34,7 +34,6 @@ import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState -import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId @@ -222,13 +221,7 @@ class JoinRoomPresenter @AssistedInject constructor( roomIdOrAlias = roomIdOrAlias, serverNames = serverNames, trigger = trigger - ).mapFailure { - if (it is ClientException.MatrixApi && it.kind == ErrorKind.Forbidden) { - JoinRoomFailures.UnauthorizedJoin - } else { - it - } - } + ) } } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index e027b5ed9c..5b9f8007a3 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -17,6 +17,7 @@ import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.ui.model.InviteSender internal const val MAX_KNOCK_MESSAGE_LENGTH = 500 @@ -36,7 +37,7 @@ data class JoinRoomState( val canReportRoom: Boolean, val eventSink: (JoinRoomEvents) -> Unit ) { - val isJoinActionUnauthorized = joinAction is AsyncAction.Failure && joinAction.error is JoinRoomFailures.UnauthorizedJoin + val isJoinActionUnauthorized = joinAction is AsyncAction.Failure && joinAction.error is JoinRoom.Failures.UnauthorizedJoin val joinAuthorisationStatus = when (contentState) { is ContentState.Loaded -> { when { @@ -107,7 +108,3 @@ sealed interface JoinAuthorisationStatus { data object Unknown : JoinAuthorisationStatus data object Unauthorized : JoinAuthorisationStatus } - -sealed class JoinRoomFailures : Exception() { - data object UnauthorizedJoin : JoinRoomFailures() -} diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt index 4a5039e364..8f891fe645 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt @@ -9,8 +9,8 @@ package io.element.android.features.joinroom.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.invite.api.InviteData +import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState -import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize @@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.exception.ClientException import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.ui.model.InviteSender open class JoinRoomStateProvider : PreviewParameterProvider { @@ -44,7 +45,7 @@ open class JoinRoomStateProvider : PreviewParameterProvider { ), aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin), - joinAction = AsyncAction.Failure(JoinRoomFailures.UnauthorizedJoin) + joinAction = AsyncAction.Failure(JoinRoom.Failures.UnauthorizedJoin) ), aJoinRoomState( contentState = aLoadedContentState(joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin), @@ -198,6 +199,16 @@ fun aJoinRoomState( eventSink = eventSink ) +internal fun anAcceptDeclineInviteState( + acceptAction: AsyncAction = AsyncAction.Uninitialized, + declineAction: AsyncAction = AsyncAction.Uninitialized, + eventSink: (AcceptDeclineInviteEvents) -> Unit = {} +) = AcceptDeclineInviteState( + acceptAction = acceptAction, + declineAction = declineAction, + eventSink = eventSink, +) + internal fun anInviteSender( userId: UserId = UserId("@bob:domain"), displayName: String = "Bob", diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index cb4818ddd1..6b8b3f5ff9 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -8,8 +8,8 @@ package io.element.android.features.roomlist.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState -import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.aLeaveRoomState import io.element.android.features.logout.api.direct.DirectLogoutState @@ -22,9 +22,11 @@ import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary import io.element.android.features.roomlist.impl.model.anInviteSender import io.element.android.features.roomlist.impl.search.RoomListSearchState import io.element.android.features.roomlist.impl.search.aRoomListSearchState +import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.push.api.battery.aBatteryOptimizationState @@ -86,6 +88,16 @@ internal fun aRoomListState( eventSink = eventSink, ) +internal fun anAcceptDeclineInviteState( + acceptAction: AsyncAction = AsyncAction.Uninitialized, + declineAction: AsyncAction = AsyncAction.Uninitialized, + eventSink: (AcceptDeclineInviteEvents) -> Unit = {} +) = AcceptDeclineInviteState( + acceptAction = acceptAction, + declineAction = declineAction, + eventSink = eventSink, +) + internal fun aRoomListRoomSummaryList(): ImmutableList { return persistentListOf( aRoomListRoomSummary( diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/join/JoinRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/join/JoinRoom.kt index cfa29cee6c..731512b2e9 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/join/JoinRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/join/JoinRoom.kt @@ -16,4 +16,8 @@ interface JoinRoom { serverNames: List, trigger: JoinedRoom.Trigger, ): Result + + sealed class Failures : Exception() { + data object UnauthorizedJoin : Failures() + } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt index 0abe45c0fa..98a2175df9 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt @@ -9,9 +9,12 @@ package io.element.android.libraries.matrix.impl.room.join import com.squareup.anvil.annotations.ContributesBinding import im.vector.app.features.analytics.plan.JoinedRoom +import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomIdOrAlias +import io.element.android.libraries.matrix.api.exception.ClientException +import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.impl.analytics.toAnalyticsJoinedRoom import io.element.android.services.analytics.api.AnalyticsService @@ -42,6 +45,15 @@ class DefaultJoinRoom @Inject constructor( if (roomInfo != null) { analyticsService.capture(roomInfo.toAnalyticsJoinedRoom(trigger)) } + }.mapFailure { + if (it is ClientException.MatrixApi) { + when (it.kind) { + ErrorKind.Forbidden -> JoinRoom.Failures.UnauthorizedJoin + else -> it + } + } else { + it + } }.map { } } } From 57a8d30021170dc3f44b75a9da52ed1291fc7936 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 20 Jun 2025 16:40:52 +0200 Subject: [PATCH 2/4] change (accept invite) : updates the error title/content dialog for accept/decline actions --- .../AcceptDeclineInviteStateProvider.kt | 25 +++++++++++++++---- .../acceptdecline/AcceptDeclineInviteView.kt | 18 ++++++++++++- .../src/main/res/values/localazy.xml | 1 + 3 files changed, 38 insertions(+), 6 deletions(-) rename features/invite/{api/src/main/kotlin/io/element/android/features/invite/api => impl/src/main/kotlin/io/element/android/features/invite/impl}/acceptdecline/AcceptDeclineInviteStateProvider.kt (62%) diff --git a/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/acceptdecline/AcceptDeclineInviteStateProvider.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteStateProvider.kt similarity index 62% rename from features/invite/api/src/main/kotlin/io/element/android/features/invite/api/acceptdecline/AcceptDeclineInviteStateProvider.kt rename to features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteStateProvider.kt index 4c33f9e48f..9896de1d3e 100644 --- a/features/invite/api/src/main/kotlin/io/element/android/features/invite/api/acceptdecline/AcceptDeclineInviteStateProvider.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteStateProvider.kt @@ -1,14 +1,18 @@ /* - * Copyright 2024 New Vector Ltd. + * Copyright 2025 New Vector Ltd. * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.invite.api.acceptdecline +package io.element.android.features.invite.impl.acceptdecline import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.features.invite.api.InviteData +import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents +import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState +import io.element.android.features.invite.api.acceptdecline.ConfirmingDeclineInvite +import io.element.android.features.invite.impl.AcceptInvite import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.core.RoomId @@ -18,26 +22,37 @@ open class AcceptDeclineInviteStateProvider : PreviewParameterProvider = AsyncAction.Uninitialized, declineAction: AsyncAction = AsyncAction.Uninitialized, eventSink: (AcceptDeclineInviteEvents) -> Unit = {} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteView.kt index 2585300431..9c672594e0 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInviteView.kt @@ -15,8 +15,8 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState -import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteStateProvider import io.element.android.features.invite.api.acceptdecline.ConfirmingDeclineInvite +import io.element.android.features.invite.impl.AcceptInvite import io.element.android.features.invite.impl.R import io.element.android.libraries.designsystem.components.async.AsyncActionView import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog @@ -39,6 +39,16 @@ fun AcceptDeclineInviteView( onErrorDismiss = { state.eventSink(InternalAcceptDeclineInviteEvents.DismissAcceptError) }, + errorTitle = { + stringResource(CommonStrings.common_something_went_wrong) + }, + errorMessage = { error -> + if (error is AcceptInvite.Failures.InvalidInvite) { + stringResource(CommonStrings.error_invalid_invite) + } else { + stringResource(CommonStrings.error_network_or_server_issue) + } + } ) AsyncActionView( async = state.declineAction, @@ -46,6 +56,12 @@ fun AcceptDeclineInviteView( onErrorDismiss = { state.eventSink(InternalAcceptDeclineInviteEvents.DismissDeclineError) }, + errorTitle = { + stringResource(CommonStrings.common_something_went_wrong) + }, + errorMessage = { + stringResource(CommonStrings.error_network_or_server_issue) + }, confirmationDialog = { confirming -> // Note: confirming will always be of type ConfirmingDeclineInvite. if (confirming is ConfirmingDeclineInvite) { diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 323b762a43..9d6a7cb9b9 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -333,6 +333,7 @@ Are you sure you want to continue?" "Failed loading messages" "%1$s could not access your location. Please try again later." "Failed to upload your voice message." + "The room no longer exists or the invite is no longer valid." "Message not found" "%1$s does not have permission to access your location. You can enable access in Settings." "%1$s does not have permission to access your location. Enable access below." From fc19a9407840435f7bffcc66d82fcf934bcd8d8c Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 20 Jun 2025 14:54:33 +0000 Subject: [PATCH 3/4] Update screenshots --- ...te.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en.png | 4 ++-- ...te.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en.png | 4 ++-- ...te.impl.acceptdecline_AcceptDeclineInviteView_Day_5_en.png | 3 +++ ....impl.acceptdecline_AcceptDeclineInviteView_Night_3_en.png | 4 ++-- ....impl.acceptdecline_AcceptDeclineInviteView_Night_4_en.png | 4 ++-- ....impl.acceptdecline_AcceptDeclineInviteView_Night_5_en.png | 3 +++ 6 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_5_en.png create mode 100644 tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_5_en.png diff --git a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en.png b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en.png index 8c50af672e..6f39152c18 100644 --- a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05e7a67dfcec946de1e355afed430198c6c89f1938755907db1e83ab1bb68488 -size 12177 +oid sha256:db20190581472583a2f493275d0f7dc46ed4a2128cef475b98730e3695b918c7 +size 19149 diff --git a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en.png index e73f998cc0..a196f7839f 100644 --- a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96e2d9fd6b20b70dd3bb9b3caaea2cc3eaed1644c3371889cbc56d608bd4b49b -size 11826 +oid sha256:784fd291db5fc825b8c1f0bac5ed3066e3aaa67fd6cbc35fd65b0df92f7cb052 +size 20504 diff --git a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_5_en.png b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_5_en.png new file mode 100644 index 0000000000..6f39152c18 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Day_5_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db20190581472583a2f493275d0f7dc46ed4a2128cef475b98730e3695b918c7 +size 19149 diff --git a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_3_en.png b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_3_en.png index f9d4df3145..67ef646472 100644 --- a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_3_en.png +++ b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_3_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24adccc976a5611f31d0caaa614212da841a5a9abd5e9ebb706fe1f9cbfb6408 -size 10729 +oid sha256:d4557838eceb90ec501062367413359550ccc927cd4e0c50c9a01c2d9eb0938f +size 17146 diff --git a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_4_en.png index cf81e64432..a205f24caf 100644 --- a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f41edac4c092e5999950e97b0352ffa46c083ba2cd50c8b5b408eff8a85df06 -size 10376 +oid sha256:e620cc1fe0e21a92da88948bc8da2db49c3bcaea0480f8abaa61e22a0882a56e +size 18341 diff --git a/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_5_en.png b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_5_en.png new file mode 100644 index 0000000000..67ef646472 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/features.invite.impl.acceptdecline_AcceptDeclineInviteView_Night_5_en.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4557838eceb90ec501062367413359550ccc927cd4e0c50c9a01c2d9eb0938f +size 17146 From c857f7a243bb77d956c69f041fb329d963ffa463 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 20 Jun 2025 18:14:34 +0200 Subject: [PATCH 4/4] change (accept invite) : fix tests after api break --- .../features/joinroom/impl/JoinRoomPresenterTest.kt | 6 +++--- .../android/features/joinroom/impl/JoinRoomViewTest.kt | 9 +++++---- .../features/roomlist/impl/RoomListPresenterTest.kt | 1 - 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index c751dc971f..ac716a4203 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -13,7 +13,6 @@ import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState -import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState import io.element.android.features.invite.api.toInviteData import io.element.android.features.invite.test.InMemorySeenInvitesStore import io.element.android.features.joinroom.impl.di.CancelKnockRoom @@ -36,6 +35,7 @@ import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomMembershipDetails import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID @@ -304,7 +304,7 @@ class JoinRoomPresenterTest { val presenter = createJoinRoomPresenter( roomDescription = Optional.of(roomDescription), joinRoomLambda = { _, _, _ -> - Result.failure(ClientException.MatrixApi(ErrorKind.Forbidden, "403", "Forbidden", null)) + Result.failure(JoinRoom.Failures.UnauthorizedJoin) }, ) presenter.test { @@ -316,7 +316,7 @@ class JoinRoomPresenterTest { assertThat(state.joinAction).isEqualTo(AsyncAction.Loading) } awaitItem().also { state -> - assertThat(state.joinAction).isEqualTo(AsyncAction.Failure(JoinRoomFailures.UnauthorizedJoin)) + assertThat(state.joinAction).isEqualTo(AsyncAction.Failure(JoinRoom.Failures.UnauthorizedJoin)) assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.Unauthorized) } } diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt index 00d73db03b..0205c1cac0 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomViewTest.kt @@ -15,6 +15,7 @@ import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.test.anInviteData import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.matrix.api.room.RoomType +import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.test.room.aRoomMember import io.element.android.libraries.matrix.ui.model.toInviteSender import io.element.android.libraries.ui.strings.CommonStrings @@ -199,9 +200,9 @@ class JoinRoomViewTest { canReportRoom = false, eventSink = eventsRecorder, ) - rule.setJoinRoomView(state = joinRoomState,) - rule.clickOn(R.string.screen_join_room_decline_and_block_button_title) - eventsRecorder.assertSingle(JoinRoomEvents.DeclineInvite(inviteData, true)) + rule.setJoinRoomView(state = joinRoomState) + rule.clickOn(R.string.screen_join_room_decline_and_block_button_title) + eventsRecorder.assertSingle(JoinRoomEvents.DeclineInvite(inviteData, true)) } @Test @@ -239,7 +240,7 @@ class JoinRoomViewTest { rule.setJoinRoomView( aJoinRoomState( contentState = aLoadedContentState(), - joinAction = AsyncAction.Failure(JoinRoomFailures.UnauthorizedJoin), + joinAction = AsyncAction.Failure(JoinRoom.Failures.UnauthorizedJoin), eventSink = eventsRecorder, ), onBackClick = it diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt index 3184a44a1c..db605b5b6c 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt @@ -15,7 +15,6 @@ import im.vector.app.features.analytics.plan.Interaction import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState -import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState import io.element.android.features.invite.test.InMemorySeenInvitesStore import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomState