From 683a593b5050cef3ce3e02944849742e580e762a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Apr 2024 09:56:19 +0200 Subject: [PATCH] Extract extension `setTimelineView` --- .../impl/timeline/TimelineViewTest.kt | 90 ++++++++++--------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt index 0f99e8b558..d16de9f01d 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/TimelineViewTest.kt @@ -17,11 +17,14 @@ package io.element.android.features.messages.impl.timeline import androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel +import io.element.android.features.messages.impl.typing.TypingNotificationState import io.element.android.features.messages.impl.typing.aTypingNotificationState +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams @@ -29,6 +32,7 @@ import io.element.android.tests.testutils.EventsRecorder import kotlinx.collections.immutable.persistentListOf import org.junit.Rule import org.junit.Test +import org.junit.rules.TestRule import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) @@ -38,53 +42,59 @@ class TimelineViewTest { @Test fun `reaching the end of the timeline with more events to load emits a LoadMore event`() { val eventsRecorder = EventsRecorder() - rule.setContent { - TimelineView( - aTimelineState( - timelineItems = persistentListOf( - TimelineItem.Virtual( - id = "backward_pagination", - model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0) - ), + rule.setTimelineView( + state = aTimelineState( + timelineItems = persistentListOf( + TimelineItem.Virtual( + id = "backward_pagination", + model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0) ), - eventSink = eventsRecorder, ), - typingNotificationState = aTypingNotificationState(), - onUserDataClicked = EnsureNeverCalledWithParam(), - onLinkClicked = EnsureNeverCalledWithParam(), - onMessageClicked = EnsureNeverCalledWithParam(), - onMessageLongClicked = EnsureNeverCalledWithParam(), - onTimestampClicked = EnsureNeverCalledWithParam(), - onSwipeToReply = EnsureNeverCalledWithParam(), - onReactionClicked = EnsureNeverCalledWithTwoParams(), - onReactionLongClicked = EnsureNeverCalledWithTwoParams(), - onMoreReactionsClicked = EnsureNeverCalledWithParam(), - onReadReceiptClick = EnsureNeverCalledWithParam(), - ) - } + eventSink = eventsRecorder, + ), + ) eventsRecorder.assertSingle(TimelineEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)) } @Test fun `reaching the end of the timeline does not send a LoadMore event`() { val eventsRecorder = EventsRecorder(expectEvents = false) - rule.setContent { - TimelineView( - aTimelineState( - eventSink = eventsRecorder, - ), - typingNotificationState = aTypingNotificationState(), - onUserDataClicked = EnsureNeverCalledWithParam(), - onLinkClicked = EnsureNeverCalledWithParam(), - onMessageClicked = EnsureNeverCalledWithParam(), - onMessageLongClicked = EnsureNeverCalledWithParam(), - onTimestampClicked = EnsureNeverCalledWithParam(), - onSwipeToReply = EnsureNeverCalledWithParam(), - onReactionClicked = EnsureNeverCalledWithTwoParams(), - onReactionLongClicked = EnsureNeverCalledWithTwoParams(), - onMoreReactionsClicked = EnsureNeverCalledWithParam(), - onReadReceiptClick = EnsureNeverCalledWithParam(), - ) - } + rule.setTimelineView( + state = aTimelineState( + eventSink = eventsRecorder, + ), + ) + } +} + +private fun AndroidComposeTestRule.setTimelineView( + state: TimelineState, + typingNotificationState: TypingNotificationState = aTypingNotificationState(), + onUserDataClicked: (UserId) -> Unit = EnsureNeverCalledWithParam(), + onLinkClicked: (String) -> Unit = EnsureNeverCalledWithParam(), + onMessageClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onMessageLongClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onTimestampClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onSwipeToReply: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onReactionClicked: (emoji: String, TimelineItem.Event) -> Unit = EnsureNeverCalledWithTwoParams(), + onReactionLongClicked: (emoji: String, TimelineItem.Event) -> Unit = EnsureNeverCalledWithTwoParams(), + onMoreReactionsClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), + onReadReceiptClick: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(), +) { + setContent { + TimelineView( + state = state, + typingNotificationState = typingNotificationState, + onUserDataClicked = onUserDataClicked, + onLinkClicked = onLinkClicked, + onMessageClicked = onMessageClicked, + onMessageLongClicked = onMessageLongClicked, + onTimestampClicked = onTimestampClicked, + onSwipeToReply = onSwipeToReply, + onReactionClicked = onReactionClicked, + onReactionLongClicked = onReactionLongClicked, + onMoreReactionsClicked = onMoreReactionsClicked, + onReadReceiptClick = onReadReceiptClick, + ) } }