Add tests and clean code after RoomList Filter rework
This commit is contained in:
parent
0824a3ab8b
commit
9641d3ef4f
27 changed files with 325 additions and 161 deletions
|
|
@ -13,31 +13,30 @@ import io.element.android.libraries.matrix.api.roomlist.RoomList
|
|||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.getAndUpdate
|
||||
|
||||
data class SimplePagedRoomList(
|
||||
override val summaries: MutableStateFlow<List<RoomSummary>>,
|
||||
override val loadingState: StateFlow<RoomList.LoadingState>,
|
||||
private val currentFilter: MutableStateFlow<RoomListFilter>
|
||||
class FakeDynamicRoomList(
|
||||
override val summaries: MutableStateFlow<List<RoomSummary>> = MutableStateFlow(emptyList()),
|
||||
override val loadingState: MutableStateFlow<RoomList.LoadingState> = MutableStateFlow(RoomList.LoadingState.NotLoaded),
|
||||
override val pageSize: Int = Int.MAX_VALUE,
|
||||
val currentFilter: MutableStateFlow<RoomListFilter> = MutableStateFlow(RoomListFilter.None),
|
||||
private val loadMoreLambda: () -> Unit = {},
|
||||
private val resetLambda: () -> Unit = {},
|
||||
private val updateFilterLambda: (RoomListFilter) -> Unit = { filter -> currentFilter.value = filter },
|
||||
private val rebuildSummariesLambda: () -> Unit = {},
|
||||
) : DynamicRoomList {
|
||||
override val pageSize: Int = Int.MAX_VALUE
|
||||
private val loadedPages = MutableStateFlow(1)
|
||||
|
||||
override suspend fun loadMore() {
|
||||
// No-op
|
||||
loadedPages.getAndUpdate { it + 1 }
|
||||
loadMoreLambda()
|
||||
}
|
||||
|
||||
override suspend fun reset() {
|
||||
loadedPages.emit(1)
|
||||
resetLambda()
|
||||
}
|
||||
|
||||
override suspend fun updateFilter(filter: RoomListFilter) {
|
||||
currentFilter.emit(filter)
|
||||
updateFilterLambda(filter)
|
||||
}
|
||||
|
||||
override suspend fun rebuildSummaries() {
|
||||
// No-op
|
||||
rebuildSummariesLambda()
|
||||
}
|
||||
}
|
||||
|
|
@ -11,29 +11,19 @@ package io.element.android.libraries.matrix.test.roomlist
|
|||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.roomlist.DynamicRoomList
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomList
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
class FakeRoomListService(
|
||||
var subscribeToVisibleRoomsLambda: (List<RoomId>) -> Unit = {},
|
||||
private val subscribeToVisibleRoomsLambda: (List<RoomId>) -> Unit = {},
|
||||
private val createRoomListLambda: (pageSize: Int) -> DynamicRoomList = { pageSize -> FakeDynamicRoomList(pageSize = pageSize) },
|
||||
override val allRooms: RoomList = createRoomListLambda(Int.MAX_VALUE),
|
||||
) : RoomListService {
|
||||
private val allRoomSummariesFlow = MutableStateFlow<List<RoomSummary>>(emptyList())
|
||||
private val allRoomsLoadingStateFlow = MutableStateFlow<RoomList.LoadingState>(RoomList.LoadingState.NotLoaded)
|
||||
private val roomListStateFlow = MutableStateFlow<RoomListService.State>(RoomListService.State.Idle)
|
||||
private val syncIndicatorStateFlow = MutableStateFlow<RoomListService.SyncIndicator>(RoomListService.SyncIndicator.Hide)
|
||||
|
||||
suspend fun postAllRooms(roomSummaries: List<RoomSummary>) {
|
||||
allRoomSummariesFlow.emit(roomSummaries)
|
||||
}
|
||||
|
||||
suspend fun postAllRoomsLoadingState(loadingState: RoomList.LoadingState) {
|
||||
allRoomsLoadingStateFlow.emit(loadingState)
|
||||
}
|
||||
|
||||
suspend fun postState(state: RoomListService.State) {
|
||||
roomListStateFlow.emit(state)
|
||||
}
|
||||
|
|
@ -46,22 +36,12 @@ class FakeRoomListService(
|
|||
pageSize: Int,
|
||||
source: RoomList.Source,
|
||||
coroutineScope: CoroutineScope,
|
||||
): DynamicRoomList {
|
||||
return when (source) {
|
||||
RoomList.Source.All -> allRooms
|
||||
}
|
||||
}
|
||||
) = createRoomListLambda(pageSize)
|
||||
|
||||
override suspend fun subscribeToVisibleRooms(roomIds: List<RoomId>) {
|
||||
subscribeToVisibleRoomsLambda(roomIds)
|
||||
}
|
||||
|
||||
override val allRooms = SimplePagedRoomList(
|
||||
allRoomSummariesFlow,
|
||||
allRoomsLoadingStateFlow,
|
||||
MutableStateFlow(RoomListFilter.all())
|
||||
)
|
||||
|
||||
override val state: StateFlow<RoomListService.State> = roomListStateFlow
|
||||
|
||||
override val syncIndicator: StateFlow<RoomListService.SyncIndicator> = syncIndicatorStateFlow
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue