diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index ede2f379ea..002bffc549 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -49,10 +49,11 @@ fun aTimelineState( timelineItems: ImmutableList = persistentListOf(), paginationState: MatrixTimeline.PaginationState = aPaginationState(), renderReadReceipts: Boolean = false, + timelineRoomInfo: TimelineRoomInfo = aTimelineRoomInfo(), eventSink: (TimelineEvents) -> Unit = {}, ) = TimelineState( timelineItems = timelineItems, - timelineRoomInfo = aTimelineRoomInfo(), + timelineRoomInfo = timelineRoomInfo, paginationState = paginationState, renderReadReceipts = renderReadReceipts, highlightedEventId = null, @@ -235,8 +236,9 @@ internal fun aGroupedEvents( internal fun aTimelineRoomInfo( isDirect: Boolean = false, + userHasPermissionToSendMessage: Boolean = true, ) = TimelineRoomInfo( isDirect = isDirect, - userHasPermissionToSendMessage = true, + userHasPermissionToSendMessage = userHasPermissionToSendMessage, userHasPermissionToSendReaction = true, ) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt index f6692bd0ff..a764cb3d49 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesViewTest.kt @@ -31,6 +31,7 @@ import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput +import androidx.compose.ui.test.swipeRight import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.features.messages.impl.actionlist.ActionListEvents import io.element.android.features.messages.impl.actionlist.ActionListState @@ -39,7 +40,9 @@ import io.element.android.features.messages.impl.actionlist.model.TimelineItemAc import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState import io.element.android.features.messages.impl.timeline.aTimelineItemEvent +import io.element.android.features.messages.impl.timeline.aTimelineItemList import io.element.android.features.messages.impl.timeline.aTimelineItemReadReceipts +import io.element.android.features.messages.impl.timeline.aTimelineRoomInfo import io.element.android.features.messages.impl.timeline.aTimelineState import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents @@ -48,6 +51,7 @@ import io.element.android.features.messages.impl.timeline.components.receipt.bot import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuEvents import io.element.android.features.messages.impl.timeline.components.retrysendmenu.aRetrySendMenuState import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.ui.strings.CommonStrings @@ -234,6 +238,39 @@ class MessagesViewTest { eventsRecorder.assertSingle(ReadReceiptBottomSheetEvents.EventSelected(timelineItem)) } + @Test + fun `swiping on an Event emits the expected Event`() { + swipeTest(userHasPermissionToSendMessage = true) + } + + @Test + fun `swiping on an Event emits no Event if user does not have permission to send message`() { + swipeTest(userHasPermissionToSendMessage = false) + } + + private fun swipeTest(userHasPermissionToSendMessage: Boolean) { + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + timelineState = aTimelineState( + timelineItems = aTimelineItemList(aTimelineItemTextContent()), + timelineRoomInfo = aTimelineRoomInfo( + userHasPermissionToSendMessage = userHasPermissionToSendMessage + ), + ), + eventSink = eventsRecorder, + ) + rule.setMessagesView( + state = state, + ) + rule.onAllNodesWithTag(TestTags.messageBubble.value).onFirst().performTouchInput { swipeRight(endX = 200f) } + if (userHasPermissionToSendMessage) { + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + eventsRecorder.assertSingle(MessagesEvents.HandleAction(TimelineItemAction.Reply, timelineItem)) + } else { + eventsRecorder.assertEmpty() + } + } + @Test fun `clicking on send location invoke expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false)