diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index f581149ad2..119906a964 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -92,6 +92,9 @@ fun aMessagesState( roomName: AsyncData = AsyncData.Success("Room name"), roomAvatar: AsyncData = AsyncData.Success(AvatarData("!id:domain", "Room name", size = AvatarSize.TimelineRoom)), userHasPermissionToSendMessage: Boolean = true, + userHasPermissionToRedactOwn: Boolean = false, + userHasPermissionToRedactOther: Boolean = false, + userHasPermissionToSendReaction: Boolean = true, composerState: MessageComposerState = aMessageComposerState( richTextEditorState = RichTextEditorState("Hello", initialFocus = true), isFullScreen = false, @@ -112,9 +115,9 @@ fun aMessagesState( roomName = roomName, roomAvatar = roomAvatar, userHasPermissionToSendMessage = userHasPermissionToSendMessage, - userHasPermissionToRedactOwn = false, - userHasPermissionToRedactOther = false, - userHasPermissionToSendReaction = true, + userHasPermissionToRedactOwn = userHasPermissionToRedactOwn, + userHasPermissionToRedactOther = userHasPermissionToRedactOther, + userHasPermissionToSendReaction = userHasPermissionToSendReaction, composerState = composerState, voiceMessageComposerState = voiceMessageComposerState, timelineState = aTimelineState( 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 1eb4f54d76..841ea4ac2c 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.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTouchInput 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 import io.element.android.features.messages.impl.actionlist.anActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction @@ -146,6 +147,59 @@ class MessagesViewTest { eventsRecorder.assertSingle(RetrySendMenuEvents.EventSelected(timelineItem)) } + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToSendMessage`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToSendMessage = true) + } + + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToRedactOwn`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToRedactOwn = true) + } + + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToRedactOther`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToRedactOther = true) + } + + @Test + fun `long clicking on an Event emits the expected Event userHasPermissionToSendReaction`() { + `long clicking on an Event emits the expected Event`(userHasPermissionToSendReaction = true) + } + + private fun `long clicking on an Event emits the expected Event`( + userHasPermissionToSendMessage: Boolean = false, + userHasPermissionToRedactOwn: Boolean = false, + userHasPermissionToRedactOther: Boolean = false, + userHasPermissionToSendReaction: Boolean = false, + ) { + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + actionListState = anActionListState( + eventSink = eventsRecorder + ), + userHasPermissionToSendMessage = userHasPermissionToSendMessage, + userHasPermissionToRedactOwn = userHasPermissionToRedactOwn, + userHasPermissionToRedactOther = userHasPermissionToRedactOther, + userHasPermissionToSendReaction = userHasPermissionToSendReaction, + ) + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + rule.setMessagesView( + state = state, + ) + // Cannot perform click on "Text", it's not detected. Use tag instead + rule.onAllNodesWithTag(TestTags.messageBubble.value).onFirst().performTouchInput { longClick() } + eventsRecorder.assertSingle( + ActionListEvents.ComputeForMessage( + event = timelineItem, + canRedactOwn = state.userHasPermissionToRedactOwn, + canRedactOther = state.userHasPermissionToRedactOther, + canSendMessage = state.userHasPermissionToSendMessage, + canSendReaction = state.userHasPermissionToSendReaction, + ) + ) + } + @Test fun `clicking on send location invoke expected callback`() { val eventsRecorder = EventsRecorder(expectEvents = false)