@@ -33,6 +33,7 @@ import androidx.compose.ui.test.onNodeWithText
33
33
import androidx.compose.ui.test.performClick
34
34
import androidx.compose.ui.test.performTouchInput
35
35
import androidx.compose.ui.test.swipeRight
36
+ import androidx.compose.ui.text.AnnotatedString
36
37
import androidx.test.ext.junit.runners.AndroidJUnit4
37
38
import io.element.android.emojibasebindings.Emoji
38
39
import io.element.android.emojibasebindings.EmojibaseCategory
@@ -43,6 +44,10 @@ import io.element.android.features.messages.impl.actionlist.anActionListState
43
44
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
44
45
import io.element.android.features.messages.impl.attachments.Attachment
45
46
import io.element.android.features.messages.impl.messagecomposer.aMessageComposerState
47
+ import io.element.android.features.messages.impl.pinned.banner.PinnedMessagesBannerItem
48
+ import io.element.android.features.messages.impl.pinned.banner.aLoadedPinnedMessagesBannerState
49
+ import io.element.android.features.messages.impl.timeline.FOCUS_ON_PINNED_EVENT_DEBOUNCE_DURATION_IN_MILLIS
50
+ import io.element.android.features.messages.impl.timeline.TimelineEvents
46
51
import io.element.android.features.messages.impl.timeline.aTimelineItemEvent
47
52
import io.element.android.features.messages.impl.timeline.aTimelineItemReadReceipts
48
53
import io.element.android.features.messages.impl.timeline.aTimelineRoomInfo
@@ -54,6 +59,7 @@ import io.element.android.features.messages.impl.timeline.components.receipt.aRe
54
59
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents
55
60
import io.element.android.features.messages.impl.timeline.model.TimelineItem
56
61
import io.element.android.libraries.matrix.api.core.UserId
62
+ import io.element.android.libraries.matrix.test.AN_EVENT_ID
57
63
import io.element.android.libraries.testtags.TestTags
58
64
import io.element.android.libraries.ui.strings.CommonStrings
59
65
import io.element.android.tests.testutils.EnsureCalledOnceWithParam
@@ -72,6 +78,7 @@ import org.junit.Test
72
78
import org.junit.rules.TestRule
73
79
import org.junit.runner.RunWith
74
80
import org.robolectric.annotation.Config
81
+ import kotlin.time.Duration.Companion.milliseconds
75
82
76
83
@RunWith(AndroidJUnit4 ::class )
77
84
class MessagesViewTest {
@@ -458,6 +465,25 @@ class MessagesViewTest {
458
465
customReactionStateEventsRecorder.assertSingle(CustomReactionEvents .DismissCustomReactionSheet )
459
466
eventsRecorder.assertSingle(MessagesEvents .ToggleReaction (aUnicode, timelineItem.eventId!! ))
460
467
}
468
+
469
+ @Test
470
+ fun `clicking on pinned messages banner emits the expected Event` () {
471
+ val eventsRecorder = EventsRecorder <TimelineEvents >()
472
+ val state = aMessagesState(
473
+ timelineState = aTimelineState(eventSink = eventsRecorder),
474
+ pinnedMessagesBannerState = aLoadedPinnedMessagesBannerState(
475
+ knownPinnedMessagesCount = 2 ,
476
+ currentPinnedMessageIndex = 0 ,
477
+ currentPinnedMessage = PinnedMessagesBannerItem (
478
+ eventId = AN_EVENT_ID ,
479
+ formatted = AnnotatedString (" This is a pinned message" )
480
+ ),
481
+ ),
482
+ )
483
+ rule.setMessagesView(state = state)
484
+ rule.onNodeWithText(" This is a pinned message" ).performClick()
485
+ eventsRecorder.assertSingle(TimelineEvents .FocusOnEvent (AN_EVENT_ID , debounce = FOCUS_ON_PINNED_EVENT_DEBOUNCE_DURATION_IN_MILLIS .milliseconds))
486
+ }
461
487
}
462
488
463
489
private fun <R : TestRule > AndroidComposeTestRule <R , ComponentActivity >.setMessagesView (
0 commit comments