@@ -43,6 +43,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
43
43
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextContent
44
44
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent
45
45
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemPollContent
46
+ import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
46
47
import io.element.android.features.messages.impl.typing.TypingNotificationPresenter
47
48
import io.element.android.features.messages.impl.utils.FakeTextPillificationHelper
48
49
import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPlayer
@@ -895,6 +896,62 @@ class MessagesPresenterTest {
895
896
}
896
897
}
897
898
899
+ @Test
900
+ fun `present - handle action pin` () = runTest {
901
+ val pinEventLambda = lambdaRecorder { _: EventId -> Result .success(true ) }
902
+ val timeline = FakeTimeline ().apply {
903
+ this .pinEventLambda = pinEventLambda
904
+ }
905
+ val room = FakeMatrixRoom (
906
+ liveTimeline = timeline,
907
+ canUserSendMessageResult = { _, _ -> Result .success(true ) },
908
+ canRedactOwnResult = { Result .success(true ) },
909
+ canRedactOtherResult = { Result .success(true ) },
910
+ canUserJoinCallResult = { Result .success(true ) },
911
+ typingNoticeResult = { Result .success(Unit ) },
912
+ canUserPinUnpinResult = { Result .success(true ) },
913
+ )
914
+ val presenter = createMessagesPresenter(matrixRoom = room)
915
+ moleculeFlow(RecompositionMode .Immediate ) {
916
+ presenter.present()
917
+ }.test {
918
+ val messageEvent = aMessageEvent(
919
+ content = aTimelineItemTextContent()
920
+ )
921
+ val initialState = awaitFirstItem()
922
+ initialState.eventSink.invoke(MessagesEvents .HandleAction (TimelineItemAction .Pin , messageEvent))
923
+ assert (pinEventLambda).isCalledOnce().with (value(messageEvent.eventId))
924
+ }
925
+ }
926
+
927
+ @Test
928
+ fun `present - handle action unpin` () = runTest {
929
+ val unpinEventLambda = lambdaRecorder { _: EventId -> Result .success(true ) }
930
+ val timeline = FakeTimeline ().apply {
931
+ this .unpinEventLambda = unpinEventLambda
932
+ }
933
+ val room = FakeMatrixRoom (
934
+ liveTimeline = timeline,
935
+ canUserSendMessageResult = { _, _ -> Result .success(true ) },
936
+ canRedactOwnResult = { Result .success(true ) },
937
+ canRedactOtherResult = { Result .success(true ) },
938
+ canUserJoinCallResult = { Result .success(true ) },
939
+ typingNoticeResult = { Result .success(Unit ) },
940
+ canUserPinUnpinResult = { Result .success(true ) },
941
+ )
942
+ val presenter = createMessagesPresenter(matrixRoom = room)
943
+ moleculeFlow(RecompositionMode .Immediate ) {
944
+ presenter.present()
945
+ }.test {
946
+ val messageEvent = aMessageEvent(
947
+ content = aTimelineItemTextContent()
948
+ )
949
+ val initialState = awaitFirstItem()
950
+ initialState.eventSink.invoke(MessagesEvents .HandleAction (TimelineItemAction .Unpin , messageEvent))
951
+ assert (unpinEventLambda).isCalledOnce().with (value(messageEvent.eventId))
952
+ }
953
+ }
954
+
898
955
private suspend fun <T > ReceiveTurbine<T>.awaitFirstItem (): T {
899
956
// Skip 2 item if Mentions feature is enabled, else 1
900
957
skipItems(if (FeatureFlags .Mentions .defaultValue(aBuildMeta())) 2 else 1 )
0 commit comments