diff --git a/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/Test.kt b/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/Test.kt deleted file mode 100644 index dd6872124b..0000000000 --- a/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/Test.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2023 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@file:OptIn(ExperimentalCoroutinesApi::class) - -package io.element.android.features.messages.timeline - -import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.UnconfinedTestDispatcher - -// TODO Move to common module to reuse -fun testCoroutineDispatchers() = CoroutineDispatchers( - io = UnconfinedTestDispatcher(), - computation = UnconfinedTestDispatcher(), - main = UnconfinedTestDispatcher(), - diffUpdateDispatcher = UnconfinedTestDispatcher(), -) diff --git a/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt b/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt index bc1f90395d..b209d4ce5e 100644 --- a/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt +++ b/features/messages/src/test/kotlin/io/element/android/features/messages/timeline/TimelinePresenterTest.kt @@ -48,12 +48,27 @@ class TimelinePresenterTest { } @Test - fun `present - load more`() = runTest { - val matrixTimeline = FakeMatrixTimeline() - val matrixRoom = FakeMatrixRoom(matrixTimeline = matrixTimeline) + fun `present - makes sure timeline is initialized and disposed`() = runTest { + val fakeTimeline = FakeMatrixTimeline() val presenter = TimelinePresenter( timelineItemsFactory = aTimelineItemsFactory(), - room = matrixRoom, + room = FakeMatrixRoom(matrixTimeline = fakeTimeline), + ) + assertThat(fakeTimeline.isInitialized).isFalse() + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + skipItems(2) + assertThat(fakeTimeline.isInitialized).isTrue() + } + assertThat(fakeTimeline.isInitialized).isFalse() + } + + @Test + fun `present - load more`() = runTest { + val presenter = TimelinePresenter( + timelineItemsFactory = aTimelineItemsFactory(), + room = FakeMatrixRoom(), ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() @@ -73,11 +88,9 @@ class TimelinePresenterTest { @Test fun `present - set highlighted event`() = runTest { - val matrixTimeline = FakeMatrixTimeline() - val matrixRoom = FakeMatrixRoom(matrixTimeline = matrixTimeline) val presenter = TimelinePresenter( timelineItemsFactory = aTimelineItemsFactory(), - room = matrixRoom, + room = FakeMatrixRoom(), ) moleculeFlow(RecompositionClock.Immediate) { presenter.present() diff --git a/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt index 9f8e2aa8ba..1fdf17260f 100644 --- a/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt +++ b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt @@ -31,6 +31,7 @@ class FakeMatrixTimeline( private val paginationState: MutableStateFlow = MutableStateFlow(initialPaginationState) private val timelineItems: MutableStateFlow> = MutableStateFlow(initialTimelineItems) + var isInitialized = false fun updatePaginationState(update: (MatrixTimeline.PaginationState.() -> MatrixTimeline.PaginationState)) { paginationState.value = update(paginationState.value) @@ -62,9 +63,13 @@ class FakeMatrixTimeline( return Result.success(Unit) } - override fun initialize() = Unit + override fun initialize() { + isInitialized = true + } - override fun dispose() = Unit + override fun dispose() { + isInitialized = false + } override suspend fun sendMessage(message: String): Result { return Result.success(Unit)