From e8ad3c8f9c62b7d2d77044d39f3baf7459dc7d3c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Feb 2024 22:22:32 +0100 Subject: [PATCH] Add test on `MessagesViewTest`: clicking on a custom emoji emits the expected Events. And fix a bug, the Event `CustomReactionEvents.DismissCustomReactionSheet` is actually managed by the BottomSheet itself. --- .../messages/impl/MessagesStateProvider.kt | 3 +- .../features/messages/impl/MessagesView.kt | 1 - .../messages/impl/MessagesViewTest.kt | 45 +++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) 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 8c629e91d1..f1af9ad225 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 @@ -154,9 +154,10 @@ fun aReactionSummaryState( ) fun aCustomReactionState( + target: CustomReactionState.Target = CustomReactionState.Target.None, eventSink: (CustomReactionEvents) -> Unit = {}, ) = CustomReactionState( - target = CustomReactionState.Target.None, + target = target, selectedEmoji = persistentSetOf(), eventSink = eventSink, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index fd1c6bf19b..d0fecc8575 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -250,7 +250,6 @@ fun MessagesView( state = state.customReactionState, onEmojiSelected = { eventId, emoji -> state.eventSink(MessagesEvents.ToggleReaction(emoji.unicode, eventId)) - state.customReactionState.eventSink(CustomReactionEvents.DismissCustomReactionSheet) } ) 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 aa9429a1fa..144cb14561 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 @@ -33,6 +33,9 @@ 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.emojibasebindings.Emoji +import io.element.android.emojibasebindings.EmojibaseCategory +import io.element.android.emojibasebindings.EmojibaseStore 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 @@ -45,6 +48,7 @@ import io.element.android.features.messages.impl.timeline.aTimelineItemReadRecei 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.customreaction.CustomReactionState import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents @@ -426,6 +430,47 @@ class MessagesViewTest { rule.mainClock.advanceTimeBy(milliseconds = 1_000) eventsRecorder.assertSingle(CustomReactionEvents.ShowCustomReactionSheet(timelineItem)) } + + @Test + fun `clicking on a custom emoji emits the expected Events`() { + val aUnicode = "🙈" + val customReactionStateEventsRecorder = EventsRecorder() + val eventsRecorder = EventsRecorder() + val state = aMessagesState( + eventSink = eventsRecorder, + ) + val timelineItem = state.timelineState.timelineItems.first() as TimelineItem.Event + val stateWithCustomReactionState = state.copy( + customReactionState = aCustomReactionState( + target = CustomReactionState.Target.Success( + event = timelineItem, + emojibaseStore = EmojibaseStore( + categories = mapOf( + EmojibaseCategory.People to listOf( + Emoji( + hexcode = "", + label = "", + tags = emptyList(), + shortcodes = emptyList(), + unicode = aUnicode, + skins = null, + ) + ) + ) + ), + ), + eventSink = customReactionStateEventsRecorder + ), + ) + rule.setMessagesView( + state = stateWithCustomReactionState, + ) + rule.onNodeWithText(aUnicode, useUnmergedTree = true).performClick() + // Give time for the close animation to complete + rule.mainClock.advanceTimeBy(milliseconds = 1_000) + customReactionStateEventsRecorder.assertSingle(CustomReactionEvents.DismissCustomReactionSheet) + eventsRecorder.assertSingle(MessagesEvents.ToggleReaction(aUnicode, timelineItem.eventId!!)) + } } private fun AndroidComposeTestRule.setMessagesView(