Extract extension setTimelineView

This commit is contained in:
Benoit Marty 2024-04-29 09:56:19 +02:00
parent de4b21cab1
commit 0532f79a19

View file

@ -17,11 +17,14 @@
package io.element.android.features.messages.impl.timeline package io.element.android.features.messages.impl.timeline
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4 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.TimelineItem
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel 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.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.libraries.matrix.api.timeline.Timeline
import io.element.android.tests.testutils.EnsureNeverCalledWithParam import io.element.android.tests.testutils.EnsureNeverCalledWithParam
import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams import io.element.android.tests.testutils.EnsureNeverCalledWithTwoParams
@ -29,6 +32,7 @@ import io.element.android.tests.testutils.EventsRecorder
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.rules.TestRule
import org.junit.runner.RunWith import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
@ -38,53 +42,59 @@ class TimelineViewTest {
@Test @Test
fun `reaching the end of the timeline with more events to load emits a LoadMore event`() { fun `reaching the end of the timeline with more events to load emits a LoadMore event`() {
val eventsRecorder = EventsRecorder<TimelineEvents>() val eventsRecorder = EventsRecorder<TimelineEvents>()
rule.setContent { rule.setTimelineView(
TimelineView( state = aTimelineState(
aTimelineState( timelineItems = persistentListOf<TimelineItem>(
timelineItems = persistentListOf<TimelineItem>( TimelineItem.Virtual(
TimelineItem.Virtual( id = "backward_pagination",
id = "backward_pagination", model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0)
model = TimelineItemLoadingIndicatorModel(Timeline.PaginationDirection.BACKWARDS, 0)
),
), ),
eventSink = eventsRecorder,
), ),
typingNotificationState = aTypingNotificationState(), eventSink = eventsRecorder,
onUserDataClicked = EnsureNeverCalledWithParam(), ),
onLinkClicked = EnsureNeverCalledWithParam(), )
onMessageClicked = EnsureNeverCalledWithParam(),
onMessageLongClicked = EnsureNeverCalledWithParam(),
onTimestampClicked = EnsureNeverCalledWithParam(),
onSwipeToReply = EnsureNeverCalledWithParam(),
onReactionClicked = EnsureNeverCalledWithTwoParams(),
onReactionLongClicked = EnsureNeverCalledWithTwoParams(),
onMoreReactionsClicked = EnsureNeverCalledWithParam(),
onReadReceiptClick = EnsureNeverCalledWithParam(),
)
}
eventsRecorder.assertSingle(TimelineEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)) eventsRecorder.assertSingle(TimelineEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS))
} }
@Test @Test
fun `reaching the end of the timeline does not send a LoadMore event`() { fun `reaching the end of the timeline does not send a LoadMore event`() {
val eventsRecorder = EventsRecorder<TimelineEvents>(expectEvents = false) val eventsRecorder = EventsRecorder<TimelineEvents>(expectEvents = false)
rule.setContent { rule.setTimelineView(
TimelineView( state = aTimelineState(
aTimelineState( eventSink = eventsRecorder,
eventSink = eventsRecorder, ),
), )
typingNotificationState = aTypingNotificationState(), }
onUserDataClicked = EnsureNeverCalledWithParam(), }
onLinkClicked = EnsureNeverCalledWithParam(),
onMessageClicked = EnsureNeverCalledWithParam(), private fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.setTimelineView(
onMessageLongClicked = EnsureNeverCalledWithParam(), state: TimelineState,
onTimestampClicked = EnsureNeverCalledWithParam(), typingNotificationState: TypingNotificationState = aTypingNotificationState(),
onSwipeToReply = EnsureNeverCalledWithParam(), onUserDataClicked: (UserId) -> Unit = EnsureNeverCalledWithParam(),
onReactionClicked = EnsureNeverCalledWithTwoParams(), onLinkClicked: (String) -> Unit = EnsureNeverCalledWithParam(),
onReactionLongClicked = EnsureNeverCalledWithTwoParams(), onMessageClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(),
onMoreReactionsClicked = EnsureNeverCalledWithParam(), onMessageLongClicked: (TimelineItem.Event) -> Unit = EnsureNeverCalledWithParam(),
onReadReceiptClick = 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,
)
} }
} }