Skip to content

Commit de7d93e

Browse files
committed
Add test on RustRoomListService
1 parent 1fd1f01 commit de7d93e

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomSyncSubscriber.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ import kotlinx.coroutines.sync.Mutex
1515
import kotlinx.coroutines.sync.withLock
1616
import kotlinx.coroutines.withContext
1717
import org.matrix.rustcomponents.sdk.RequiredState
18-
import org.matrix.rustcomponents.sdk.RoomListServiceInterface
18+
import org.matrix.rustcomponents.sdk.RoomListService
1919
import org.matrix.rustcomponents.sdk.RoomSubscription
2020
import timber.log.Timber
2121

2222
private const val DEFAULT_TIMELINE_LIMIT = 20u
2323

2424
class RoomSyncSubscriber(
25-
private val roomListService: RoomListServiceInterface,
25+
private val roomListService: RoomListService,
2626
private val dispatchers: CoroutineDispatchers,
2727
) {
2828
private val subscribedRoomIds = mutableSetOf<RoomId>()

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RustRoomListService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ private const val DEFAULT_PAGE_SIZE = 20
3131

3232
internal class RustRoomListService(
3333
private val innerRoomListService: InnerRustRoomListService,
34-
private val sessionCoroutineScope: CoroutineScope,
3534
private val sessionDispatcher: CoroutineDispatcher,
3635
private val roomListFactory: RoomListFactory,
3736
private val roomSyncSubscriber: RoomSyncSubscriber,
37+
sessionCoroutineScope: CoroutineScope,
3838
) : RoomListService {
3939
override fun createRoomList(
4040
pageSize: Int,

libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomListService.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,27 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes
1010
import org.matrix.rustcomponents.sdk.NoPointer
1111
import org.matrix.rustcomponents.sdk.RoomList
1212
import org.matrix.rustcomponents.sdk.RoomListService
13+
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
14+
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
15+
import org.matrix.rustcomponents.sdk.TaskHandle
1316

1417
class FakeRustRoomListService : RoomListService(NoPointer) {
18+
1519
override suspend fun allRooms(): RoomList {
1620
return FakeRustRoomList()
1721
}
22+
23+
private var listener: RoomListServiceSyncIndicatorListener? = null
24+
override fun syncIndicator(
25+
delayBeforeShowingInMs: UInt,
26+
delayBeforeHidingInMs: UInt,
27+
listener: RoomListServiceSyncIndicatorListener,
28+
): TaskHandle {
29+
this.listener = listener
30+
return FakeRustTaskHandle()
31+
}
32+
33+
fun emitRoomListServiceSyncIndicator(syncIndicator: RoomListServiceSyncIndicator) {
34+
listener?.onUpdate(syncIndicator)
35+
}
1836
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
package io.element.android.libraries.matrix.impl.roomlist
8+
9+
import app.cash.turbine.test
10+
import com.google.common.truth.Truth.assertThat
11+
import io.element.android.libraries.matrix.api.roomlist.RoomListService
12+
import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomListService
13+
import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber
14+
import io.element.android.tests.testutils.runCancellableScopeTestWithTestScope
15+
import io.element.android.tests.testutils.testCoroutineDispatchers
16+
import kotlinx.coroutines.CoroutineScope
17+
import kotlinx.coroutines.ExperimentalCoroutinesApi
18+
import kotlinx.coroutines.test.StandardTestDispatcher
19+
import kotlinx.coroutines.test.TestScope
20+
import kotlinx.coroutines.test.runCurrent
21+
import org.junit.Test
22+
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
23+
import org.matrix.rustcomponents.sdk.RoomListService as RustRoomListService
24+
25+
@OptIn(ExperimentalCoroutinesApi::class)
26+
class RustRoomListServiceTest {
27+
@Test
28+
fun `syncIndicator should emit the expected values`() = runCancellableScopeTestWithTestScope { testScope, cancellableScope ->
29+
val roomListService = FakeRustRoomListService()
30+
val sut = testScope.createRustRoomListService(
31+
sessionCoroutineScope = cancellableScope,
32+
roomListService = roomListService,
33+
)
34+
// Give time for mxCallback to setup
35+
testScope.runCurrent()
36+
sut.syncIndicator.test {
37+
assertThat(awaitItem()).isEqualTo(RoomListService.SyncIndicator.Hide)
38+
roomListService.emitRoomListServiceSyncIndicator(RoomListServiceSyncIndicator.SHOW)
39+
assertThat(awaitItem()).isEqualTo(RoomListService.SyncIndicator.Show)
40+
roomListService.emitRoomListServiceSyncIndicator(RoomListServiceSyncIndicator.HIDE)
41+
assertThat(awaitItem()).isEqualTo(RoomListService.SyncIndicator.Hide)
42+
}
43+
}
44+
}
45+
46+
private fun TestScope.createRustRoomListService(
47+
sessionCoroutineScope: CoroutineScope,
48+
roomListService: RustRoomListService = FakeRustRoomListService(),
49+
) = RustRoomListService(
50+
innerRoomListService = roomListService,
51+
sessionDispatcher = StandardTestDispatcher(testScheduler),
52+
roomListFactory = RoomListFactory(
53+
innerRoomListService = roomListService,
54+
sessionCoroutineScope = sessionCoroutineScope,
55+
),
56+
roomSyncSubscriber = RoomSyncSubscriber(
57+
roomListService = roomListService,
58+
dispatchers = testCoroutineDispatchers(),
59+
),
60+
sessionCoroutineScope = sessionCoroutineScope,
61+
)

0 commit comments

Comments
 (0)