Add test on RustRoomListService
This commit is contained in:
parent
4f8fe10176
commit
285ccf3ec0
4 changed files with 82 additions and 3 deletions
|
|
@ -15,14 +15,14 @@ import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.matrix.rustcomponents.sdk.RequiredState
|
import org.matrix.rustcomponents.sdk.RequiredState
|
||||||
import org.matrix.rustcomponents.sdk.RoomListServiceInterface
|
import org.matrix.rustcomponents.sdk.RoomListService
|
||||||
import org.matrix.rustcomponents.sdk.RoomSubscription
|
import org.matrix.rustcomponents.sdk.RoomSubscription
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
private const val DEFAULT_TIMELINE_LIMIT = 20u
|
private const val DEFAULT_TIMELINE_LIMIT = 20u
|
||||||
|
|
||||||
class RoomSyncSubscriber(
|
class RoomSyncSubscriber(
|
||||||
private val roomListService: RoomListServiceInterface,
|
private val roomListService: RoomListService,
|
||||||
private val dispatchers: CoroutineDispatchers,
|
private val dispatchers: CoroutineDispatchers,
|
||||||
) {
|
) {
|
||||||
private val subscribedRoomIds = mutableSetOf<RoomId>()
|
private val subscribedRoomIds = mutableSetOf<RoomId>()
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,10 @@ private const val DEFAULT_PAGE_SIZE = 20
|
||||||
|
|
||||||
internal class RustRoomListService(
|
internal class RustRoomListService(
|
||||||
private val innerRoomListService: InnerRustRoomListService,
|
private val innerRoomListService: InnerRustRoomListService,
|
||||||
private val sessionCoroutineScope: CoroutineScope,
|
|
||||||
private val sessionDispatcher: CoroutineDispatcher,
|
private val sessionDispatcher: CoroutineDispatcher,
|
||||||
private val roomListFactory: RoomListFactory,
|
private val roomListFactory: RoomListFactory,
|
||||||
private val roomSyncSubscriber: RoomSyncSubscriber,
|
private val roomSyncSubscriber: RoomSyncSubscriber,
|
||||||
|
sessionCoroutineScope: CoroutineScope,
|
||||||
) : RoomListService {
|
) : RoomListService {
|
||||||
override fun createRoomList(
|
override fun createRoomList(
|
||||||
pageSize: Int,
|
pageSize: Int,
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,27 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes
|
||||||
import org.matrix.rustcomponents.sdk.NoPointer
|
import org.matrix.rustcomponents.sdk.NoPointer
|
||||||
import org.matrix.rustcomponents.sdk.RoomList
|
import org.matrix.rustcomponents.sdk.RoomList
|
||||||
import org.matrix.rustcomponents.sdk.RoomListService
|
import org.matrix.rustcomponents.sdk.RoomListService
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
|
||||||
|
import org.matrix.rustcomponents.sdk.TaskHandle
|
||||||
|
|
||||||
class FakeRustRoomListService : RoomListService(NoPointer) {
|
class FakeRustRoomListService : RoomListService(NoPointer) {
|
||||||
|
|
||||||
override suspend fun allRooms(): RoomList {
|
override suspend fun allRooms(): RoomList {
|
||||||
return FakeRustRoomList()
|
return FakeRustRoomList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var listener: RoomListServiceSyncIndicatorListener? = null
|
||||||
|
override fun syncIndicator(
|
||||||
|
delayBeforeShowingInMs: UInt,
|
||||||
|
delayBeforeHidingInMs: UInt,
|
||||||
|
listener: RoomListServiceSyncIndicatorListener,
|
||||||
|
): TaskHandle {
|
||||||
|
this.listener = listener
|
||||||
|
return FakeRustTaskHandle()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun emitRoomListServiceSyncIndicator(syncIndicator: RoomListServiceSyncIndicator) {
|
||||||
|
listener?.onUpdate(syncIndicator)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
package io.element.android.libraries.matrix.impl.roomlist
|
||||||
|
|
||||||
|
import app.cash.turbine.test
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
|
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService
|
||||||
|
import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber
|
||||||
|
import io.element.android.tests.testutils.runCancellableScopeTestWithTestScope
|
||||||
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||||
|
import kotlinx.coroutines.test.TestScope
|
||||||
|
import kotlinx.coroutines.test.runCurrent
|
||||||
|
import org.junit.Test
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListService as RustRoomListService
|
||||||
|
|
||||||
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
|
class RustRoomListServiceTest {
|
||||||
|
@Test
|
||||||
|
fun `syncIndicator should emit the expected values`() = runCancellableScopeTestWithTestScope { testScope, cancellableScope ->
|
||||||
|
val roomListService = FakeRustRoomListService()
|
||||||
|
val sut = testScope.createRustRoomListService(
|
||||||
|
sessionCoroutineScope = cancellableScope,
|
||||||
|
roomListService = roomListService,
|
||||||
|
)
|
||||||
|
// Give time for mxCallback to setup
|
||||||
|
testScope.runCurrent()
|
||||||
|
sut.syncIndicator.test {
|
||||||
|
assertThat(awaitItem()).isEqualTo(RoomListService.SyncIndicator.Hide)
|
||||||
|
roomListService.emitRoomListServiceSyncIndicator(RoomListServiceSyncIndicator.SHOW)
|
||||||
|
assertThat(awaitItem()).isEqualTo(RoomListService.SyncIndicator.Show)
|
||||||
|
roomListService.emitRoomListServiceSyncIndicator(RoomListServiceSyncIndicator.HIDE)
|
||||||
|
assertThat(awaitItem()).isEqualTo(RoomListService.SyncIndicator.Hide)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun TestScope.createRustRoomListService(
|
||||||
|
sessionCoroutineScope: CoroutineScope,
|
||||||
|
roomListService: RustRoomListService = FakeRustRoomListService(),
|
||||||
|
) = RustRoomListService(
|
||||||
|
innerRoomListService = roomListService,
|
||||||
|
sessionDispatcher = StandardTestDispatcher(testScheduler),
|
||||||
|
roomListFactory = RoomListFactory(
|
||||||
|
innerRoomListService = roomListService,
|
||||||
|
sessionCoroutineScope = sessionCoroutineScope,
|
||||||
|
),
|
||||||
|
roomSyncSubscriber = RoomSyncSubscriber(
|
||||||
|
roomListService = roomListService,
|
||||||
|
dispatchers = testCoroutineDispatchers(),
|
||||||
|
),
|
||||||
|
sessionCoroutineScope = sessionCoroutineScope,
|
||||||
|
)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue