Skip to content

Commit d5bc682

Browse files
committed
Pinned events : add more tests on pin/unpin
1 parent 38fb26e commit d5bc682

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
4343
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextContent
4444
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent
4545
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemPollContent
46+
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent
4647
import io.element.android.features.messages.impl.typing.TypingNotificationPresenter
4748
import io.element.android.features.messages.impl.utils.FakeTextPillificationHelper
4849
import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPlayer
@@ -895,6 +896,62 @@ class MessagesPresenterTest {
895896
}
896897
}
897898

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+
898955
private suspend fun <T> ReceiveTurbine<T>.awaitFirstItem(): T {
899956
// Skip 2 item if Mentions feature is enabled, else 1
900957
skipItems(if (FeatureFlags.Mentions.defaultValue(aBuildMeta())) 2 else 1)

0 commit comments

Comments
 (0)