diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt index e8fe681692..7b13a93a5a 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt @@ -24,8 +24,12 @@ import io.element.android.features.messages.fixtures.aTimelineItemsFactory import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelinePresenter import io.element.android.features.messages.impl.timeline.groups.TimelineItemGrouper +import io.element.android.features.messages.impl.timeline.model.TimelineItem +import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom +import io.element.android.libraries.matrix.test.room.anEventTimelineItem +import io.element.android.libraries.matrix.test.timeline.FakeMatrixTimeline import kotlinx.coroutines.test.runTest import org.junit.Test @@ -91,4 +95,37 @@ class TimelinePresenterTest { assertThat(withoutHighlightedState.highlightedEventId).isNull() } } + + @Test + fun `present - expand and collapse grouped events`() = runTest { + val fakeTimeline = FakeMatrixTimeline( + initialTimelineItems = listOf( + MatrixTimelineItem.Event(anEventTimelineItem() /* This is a groupable event */), + MatrixTimelineItem.Event(anEventTimelineItem() /* This is a groupable event */), + ) + ) + val fakeRoom = FakeMatrixRoom(matrixTimeline = fakeTimeline) + val presenter = TimelinePresenter( + timelineItemsFactory = aTimelineItemsFactory(), + timelineItemGrouper = TimelineItemGrouper(), + room = fakeRoom, + ) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + skipItems(1) + fakeTimeline.updateTimelineItems { it } + val loadedState = awaitItem() + val group1 = loadedState.timelineItems.first() as TimelineItem.GroupedEvents + assertThat(group1.expanded).isFalse() + loadedState.eventSink.invoke(TimelineEvents.ToggleExpandGroup(group1)) + val withExpandedGroup = awaitItem() + val group2 = withExpandedGroup.timelineItems.first() as TimelineItem.GroupedEvents + assertThat(group2.expanded).isTrue() + withExpandedGroup.eventSink.invoke(TimelineEvents.ToggleExpandGroup(group2)) + val withCollapsedGroup = awaitItem() + val group3 = withCollapsedGroup.timelineItems.first() as TimelineItem.GroupedEvents + assertThat(group3.expanded).isFalse() + } + } }