RoomList: fix tests and sample

This commit is contained in:
ganfra 2023-06-27 14:06:58 +02:00
parent dc06b5266f
commit 3d872ec0e2
9 changed files with 87 additions and 75 deletions

View file

@ -35,8 +35,8 @@ import io.element.android.libraries.matrix.test.A_ROOM_NAME
import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.A_USER_NAME import io.element.android.libraries.matrix.test.A_USER_NAME
import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.room.FakeRoomSummaryDataSource
import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.FakeMatrixRoom
import io.element.android.libraries.matrix.test.room.FakeRoomSummaryDataSource
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Test import org.junit.Test
@ -44,10 +44,10 @@ class InviteListPresenterTests {
@Test @Test
fun `present - starts empty, adds invites when received`() = runTest { fun `present - starts empty, adds invites when received`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
FakeSeenInvitesStore(), FakeSeenInvitesStore(),
) )
@ -57,7 +57,7 @@ class InviteListPresenterTests {
val initialState = awaitItem() val initialState = awaitItem()
Truth.assertThat(initialState.inviteList).isEmpty() Truth.assertThat(initialState.inviteList).isEmpty()
invitesDataSource.postRoomSummary(listOf(aRoomSummary())) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummary()))
val withInviteState = awaitItem() val withInviteState = awaitItem()
Truth.assertThat(withInviteState.inviteList.size).isEqualTo(1) Truth.assertThat(withInviteState.inviteList.size).isEqualTo(1)
@ -68,10 +68,10 @@ class InviteListPresenterTests {
@Test @Test
fun `present - uses user ID and avatar for direct invites`() = runTest { fun `present - uses user ID and avatar for direct invites`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withDirectChatInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withDirectChatInvitation()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
FakeSeenInvitesStore(), FakeSeenInvitesStore(),
) )
@ -96,10 +96,10 @@ class InviteListPresenterTests {
@Test @Test
fun `present - includes sender details for room invites`() = runTest { fun `present - includes sender details for room invites`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
FakeSeenInvitesStore(), FakeSeenInvitesStore(),
) )
@ -122,10 +122,10 @@ class InviteListPresenterTests {
@Test @Test
fun `present - shows confirm dialog for declining direct chat invites`() = runTest { fun `present - shows confirm dialog for declining direct chat invites`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withDirectChatInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withDirectChatInvitation()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
FakeSeenInvitesStore(), FakeSeenInvitesStore(),
) )
@ -146,10 +146,10 @@ class InviteListPresenterTests {
@Test @Test
fun `present - shows confirm dialog for declining room invites`() = runTest { fun `present - shows confirm dialog for declining room invites`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
FakeSeenInvitesStore(), FakeSeenInvitesStore(),
) )
@ -170,10 +170,10 @@ class InviteListPresenterTests {
@Test @Test
fun `present - hides confirm dialog when cancelling`() = runTest { fun `present - hides confirm dialog when cancelling`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
FakeSeenInvitesStore(), FakeSeenInvitesStore(),
) )
@ -194,9 +194,9 @@ class InviteListPresenterTests {
@Test @Test
fun `present - declines invite after confirming`() = runTest { fun `present - declines invite after confirming`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val client = FakeMatrixClient( val client = FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
) )
val room = FakeMatrixRoom() val room = FakeMatrixRoom()
val presenter = InviteListPresenter(client, FakeSeenInvitesStore()) val presenter = InviteListPresenter(client, FakeSeenInvitesStore())
@ -220,9 +220,9 @@ class InviteListPresenterTests {
@Test @Test
fun `present - declines invite after confirming and sets state on error`() = runTest { fun `present - declines invite after confirming and sets state on error`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val client = FakeMatrixClient( val client = FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
) )
val room = FakeMatrixRoom() val room = FakeMatrixRoom()
val presenter = InviteListPresenter(client, FakeSeenInvitesStore()) val presenter = InviteListPresenter(client, FakeSeenInvitesStore())
@ -251,9 +251,9 @@ class InviteListPresenterTests {
@Test @Test
fun `present - dismisses declining error state`() = runTest { fun `present - dismisses declining error state`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val client = FakeMatrixClient( val client = FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
) )
val room = FakeMatrixRoom() val room = FakeMatrixRoom()
val presenter = InviteListPresenter(client, FakeSeenInvitesStore()) val presenter = InviteListPresenter(client, FakeSeenInvitesStore())
@ -283,9 +283,9 @@ class InviteListPresenterTests {
@Test @Test
fun `present - accepts invites and sets state on success`() = runTest { fun `present - accepts invites and sets state on success`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val client = FakeMatrixClient( val client = FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
) )
val room = FakeMatrixRoom() val room = FakeMatrixRoom()
val presenter = InviteListPresenter(client, FakeSeenInvitesStore()) val presenter = InviteListPresenter(client, FakeSeenInvitesStore())
@ -306,9 +306,9 @@ class InviteListPresenterTests {
@Test @Test
fun `present - accepts invites and sets state on error`() = runTest { fun `present - accepts invites and sets state on error`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val client = FakeMatrixClient( val client = FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
) )
val room = FakeMatrixRoom() val room = FakeMatrixRoom()
val presenter = InviteListPresenter(client, FakeSeenInvitesStore()) val presenter = InviteListPresenter(client, FakeSeenInvitesStore())
@ -331,9 +331,9 @@ class InviteListPresenterTests {
@Test @Test
fun `present - dismisses accepting error state`() = runTest { fun `present - dismisses accepting error state`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource().withRoomInvitation() val roomSummaryDataSource = FakeRoomSummaryDataSource().withRoomInvitation()
val client = FakeMatrixClient( val client = FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
) )
val room = FakeMatrixRoom() val room = FakeMatrixRoom()
val presenter = InviteListPresenter(client, FakeSeenInvitesStore()) val presenter = InviteListPresenter(client, FakeSeenInvitesStore())
@ -358,11 +358,11 @@ class InviteListPresenterTests {
@Test @Test
fun `present - stores seen invites when received`() = runTest { fun `present - stores seen invites when received`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
val store = FakeSeenInvitesStore() val store = FakeSeenInvitesStore()
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
store, store,
) )
@ -372,19 +372,19 @@ class InviteListPresenterTests {
awaitItem() awaitItem()
// When one invite is received, that ID is saved // When one invite is received, that ID is saved
invitesDataSource.postRoomSummary(listOf(aRoomSummary())) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummary()))
awaitItem() awaitItem()
Truth.assertThat(store.getProvidedRoomIds()).isEqualTo(setOf(A_ROOM_ID)) Truth.assertThat(store.getProvidedRoomIds()).isEqualTo(setOf(A_ROOM_ID))
// When a second is added, both are saved // When a second is added, both are saved
invitesDataSource.postRoomSummary(listOf(aRoomSummary(), aRoomSummary(A_ROOM_ID_2))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummary(), aRoomSummary(A_ROOM_ID_2)))
awaitItem() awaitItem()
Truth.assertThat(store.getProvidedRoomIds()).isEqualTo(setOf(A_ROOM_ID, A_ROOM_ID_2)) Truth.assertThat(store.getProvidedRoomIds()).isEqualTo(setOf(A_ROOM_ID, A_ROOM_ID_2))
// When they're both dismissed, an empty set is saved // When they're both dismissed, an empty set is saved
invitesDataSource.postRoomSummary(listOf()) roomSummaryDataSource.postInviteRooms(listOf())
awaitItem() awaitItem()
Truth.assertThat(store.getProvidedRoomIds()).isEmpty() Truth.assertThat(store.getProvidedRoomIds()).isEmpty()
@ -393,12 +393,12 @@ class InviteListPresenterTests {
@Test @Test
fun `present - marks invite as new if they're unseen`() = runTest { fun `present - marks invite as new if they're unseen`() = runTest {
val invitesDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
val store = FakeSeenInvitesStore() val store = FakeSeenInvitesStore()
store.publishRoomIds(setOf(A_ROOM_ID)) store.publishRoomIds(setOf(A_ROOM_ID))
val presenter = InviteListPresenter( val presenter = InviteListPresenter(
FakeMatrixClient( FakeMatrixClient(
invitesDataSource = invitesDataSource, roomSummaryDataSource = roomSummaryDataSource,
), ),
store, store,
) )
@ -407,7 +407,7 @@ class InviteListPresenterTests {
}.test { }.test {
awaitItem() awaitItem()
invitesDataSource.postRoomSummary(listOf(aRoomSummary(), aRoomSummary(A_ROOM_ID_2))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummary(), aRoomSummary(A_ROOM_ID_2)))
skipItems(1) skipItems(1)
val withInviteState = awaitItem() val withInviteState = awaitItem()
@ -420,7 +420,7 @@ class InviteListPresenterTests {
} }
private suspend fun FakeRoomSummaryDataSource.withRoomInvitation(): FakeRoomSummaryDataSource { private suspend fun FakeRoomSummaryDataSource.withRoomInvitation(): FakeRoomSummaryDataSource {
postRoomSummary( postInviteRooms(
listOf( listOf(
RoomSummary.Filled( RoomSummary.Filled(
RoomSummaryDetails( RoomSummaryDetails(
@ -449,7 +449,7 @@ class InviteListPresenterTests {
} }
private suspend fun FakeRoomSummaryDataSource.withDirectChatInvitation(): FakeRoomSummaryDataSource { private suspend fun FakeRoomSummaryDataSource.withDirectChatInvitation(): FakeRoomSummaryDataSource {
postRoomSummary( postInviteRooms(
listOf( listOf(
RoomSummary.Filled( RoomSummary.Filled(
RoomSummaryDetails( RoomSummaryDetails(

View file

@ -78,7 +78,7 @@ class ForwardMessagesPresenterTests {
@Test @Test
fun `present - update query`() = runTest { fun `present - update query`() = runTest {
val roomSummaryDataSource = FakeRoomSummaryDataSource().apply { val roomSummaryDataSource = FakeRoomSummaryDataSource().apply {
postRoomSummary(listOf(RoomSummary.Filled(aRoomSummaryDetail()))) postAllRooms(listOf(RoomSummary.Filled(aRoomSummaryDetail())))
} }
val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource) val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource)
val presenter = aPresenter(client = client) val presenter = aPresenter(client = client)

View file

@ -34,8 +34,8 @@ internal class DefaultInviteStateDataSourceTest {
@Test @Test
fun `emits NoInvites state if invites list is empty`() = runTest { fun `emits NoInvites state if invites list is empty`() = runTest {
val matrixDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
val client = FakeMatrixClient(invitesDataSource = matrixDataSource) val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource)
val seenStore = FakeSeenInvitesStore() val seenStore = FakeSeenInvitesStore()
val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers()) val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers())
@ -48,9 +48,9 @@ internal class DefaultInviteStateDataSourceTest {
@Test @Test
fun `emits NewInvites state if unseen invite exists`() = runTest { fun `emits NewInvites state if unseen invite exists`() = runTest {
val matrixDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
matrixDataSource.postRoomSummary(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID)))
val client = FakeMatrixClient(invitesDataSource = matrixDataSource) val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource)
val seenStore = FakeSeenInvitesStore() val seenStore = FakeSeenInvitesStore()
val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers()) val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers())
@ -64,9 +64,9 @@ internal class DefaultInviteStateDataSourceTest {
@Test @Test
fun `emits NewInvites state if multiple invites exist and at least one is unseen`() = runTest { fun `emits NewInvites state if multiple invites exist and at least one is unseen`() = runTest {
val matrixDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
matrixDataSource.postRoomSummary(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID), aRoomSummaryFilled(roomId = A_ROOM_ID_2))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID), aRoomSummaryFilled(roomId = A_ROOM_ID_2)))
val client = FakeMatrixClient(invitesDataSource = matrixDataSource) val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource)
val seenStore = FakeSeenInvitesStore() val seenStore = FakeSeenInvitesStore()
seenStore.publishRoomIds(setOf(A_ROOM_ID)) seenStore.publishRoomIds(setOf(A_ROOM_ID))
val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers(useUnconfinedTestDispatcher = true)) val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers(useUnconfinedTestDispatcher = true))
@ -81,9 +81,9 @@ internal class DefaultInviteStateDataSourceTest {
@Test @Test
fun `emits SeenInvites state if invite exists in seen store`() = runTest { fun `emits SeenInvites state if invite exists in seen store`() = runTest {
val matrixDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
matrixDataSource.postRoomSummary(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID)))
val client = FakeMatrixClient(invitesDataSource = matrixDataSource) val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource)
val seenStore = FakeSeenInvitesStore() val seenStore = FakeSeenInvitesStore()
seenStore.publishRoomIds(setOf(A_ROOM_ID)) seenStore.publishRoomIds(setOf(A_ROOM_ID))
val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers(useUnconfinedTestDispatcher = true)) val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers(useUnconfinedTestDispatcher = true))
@ -99,8 +99,8 @@ internal class DefaultInviteStateDataSourceTest {
@Test @Test
fun `emits new state in response to upstream events`() = runTest { fun `emits new state in response to upstream events`() = runTest {
val matrixDataSource = FakeRoomSummaryDataSource() val roomSummaryDataSource = FakeRoomSummaryDataSource()
val client = FakeMatrixClient(invitesDataSource = matrixDataSource) val client = FakeMatrixClient(roomSummaryDataSource = roomSummaryDataSource)
val seenStore = FakeSeenInvitesStore() val seenStore = FakeSeenInvitesStore()
val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers()) val dataSource = DefaultInviteStateDataSource(client, seenStore, testCoroutineDispatchers())
@ -111,7 +111,7 @@ internal class DefaultInviteStateDataSourceTest {
Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites) Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites)
// When a single invite is received, state should be NewInvites // When a single invite is received, state should be NewInvites
matrixDataSource.postRoomSummary(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID)))
skipItems(1) skipItems(1)
Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites) Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites)
@ -121,12 +121,12 @@ internal class DefaultInviteStateDataSourceTest {
Truth.assertThat(awaitItem()).isEqualTo(InvitesState.SeenInvites) Truth.assertThat(awaitItem()).isEqualTo(InvitesState.SeenInvites)
// Another new invite resets it to NewInvites // Another new invite resets it to NewInvites
matrixDataSource.postRoomSummary(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID), aRoomSummaryFilled(roomId = A_ROOM_ID_2))) roomSummaryDataSource.postInviteRooms(listOf(aRoomSummaryFilled(roomId = A_ROOM_ID), aRoomSummaryFilled(roomId = A_ROOM_ID_2)))
skipItems(1) skipItems(1)
Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites) Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NewInvites)
// All of the invites going away reverts to NoInvites // All of the invites going away reverts to NoInvites
matrixDataSource.postRoomSummary(emptyList()) roomSummaryDataSource.postInviteRooms(emptyList())
skipItems(1) skipItems(1)
Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites) Truth.assertThat(awaitItem()).isEqualTo(InvitesState.NoInvites)
} }

View file

@ -146,7 +146,7 @@ class RoomListPresenterTests {
// Room list is loaded with 16 placeholders // Room list is loaded with 16 placeholders
Truth.assertThat(withUserState.roomList.size).isEqualTo(16) Truth.assertThat(withUserState.roomList.size).isEqualTo(16)
Truth.assertThat(withUserState.roomList.all { it.isPlaceholder }).isTrue() Truth.assertThat(withUserState.roomList.all { it.isPlaceholder }).isTrue()
roomSummaryDataSource.postRoomSummary(listOf(aRoomSummaryFilled())) roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled()))
skipItems(1) skipItems(1)
val withRoomState = awaitItem() val withRoomState = awaitItem()
Truth.assertThat(withRoomState.roomList.size).isEqualTo(1) Truth.assertThat(withRoomState.roomList.size).isEqualTo(1)
@ -173,7 +173,7 @@ class RoomListPresenterTests {
moleculeFlow(RecompositionClock.Immediate) { moleculeFlow(RecompositionClock.Immediate) {
presenter.present() presenter.present()
}.test { }.test {
roomSummaryDataSource.postRoomSummary(listOf(aRoomSummaryFilled())) roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled()))
skipItems(3) skipItems(3)
val loadedState = awaitItem() val loadedState = awaitItem()
// Test filtering with result // Test filtering with result
@ -211,7 +211,7 @@ class RoomListPresenterTests {
moleculeFlow(RecompositionClock.Immediate) { moleculeFlow(RecompositionClock.Immediate) {
presenter.present() presenter.present()
}.test { }.test {
roomSummaryDataSource.postRoomSummary(listOf(aRoomSummaryFilled())) roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled()))
skipItems(3) skipItems(3)
val loadedState = awaitItem() val loadedState = awaitItem()
// check initial value // check initial value

View file

@ -112,7 +112,7 @@ private fun RoomListLoadingState.toRoomSummaryDataSourceLoadingState(): RoomSumm
} }
} }
fun RoomList.observeEntriesWithProcessor(processor: RoomSummaryListProcessor): Flow<RoomListEntriesUpdate> { private fun RoomList.observeEntriesWithProcessor(processor: RoomSummaryListProcessor): Flow<RoomListEntriesUpdate> {
return entriesFlow { roomListEntries -> return entriesFlow { roomListEntries ->
processor.postEntries(roomListEntries) processor.postEntries(roomListEntries)
}.onEach { update -> }.onEach { update ->

View file

@ -134,6 +134,10 @@ class FakeMatrixRoom(
return matrixTimeline return matrixTimeline
} }
override fun open(): Result<Unit> {
return Result.success(Unit)
}
override suspend fun userDisplayName(userId: UserId): Result<String?> = simulateLongTask { override suspend fun userDisplayName(userId: UserId): Result<String?> = simulateLongTask {
userDisplayNameResult userDisplayNameResult
} }

View file

@ -23,14 +23,32 @@ import kotlinx.coroutines.flow.StateFlow
class FakeRoomSummaryDataSource : RoomSummaryDataSource { class FakeRoomSummaryDataSource : RoomSummaryDataSource {
private val roomSummariesFlow = MutableStateFlow<List<RoomSummary>>(emptyList()) private val allRoomSummariesFlow = MutableStateFlow<List<RoomSummary>>(emptyList())
private val inviteRoomSummariesFlow = MutableStateFlow<List<RoomSummary>>(emptyList())
private val allRoomsLoadingStateFlow = MutableStateFlow<RoomSummaryDataSource.LoadingState>(RoomSummaryDataSource.LoadingState.NotLoaded)
suspend fun postRoomSummary(roomSummaries: List<RoomSummary>) { suspend fun postAllRooms(roomSummaries: List<RoomSummary>) {
roomSummariesFlow.emit(roomSummaries) allRoomSummariesFlow.emit(roomSummaries)
}
suspend fun postInviteRooms(roomSummaries: List<RoomSummary>) {
inviteRoomSummariesFlow.emit(roomSummaries)
}
suspend fun postLoadingState(loadingState: RoomSummaryDataSource.LoadingState) {
allRoomsLoadingStateFlow.emit(loadingState)
}
override fun allRoomsLoadingState(): StateFlow<RoomSummaryDataSource.LoadingState> {
return allRoomsLoadingStateFlow
} }
override fun allRooms(): StateFlow<List<RoomSummary>> { override fun allRooms(): StateFlow<List<RoomSummary>> {
return roomSummariesFlow return allRoomSummariesFlow
}
override fun inviteRooms(): StateFlow<List<RoomSummary>> {
return inviteRoomSummariesFlow
} }
var latestSlidingSyncRange: IntRange? = null var latestSlidingSyncRange: IntRange? = null

View file

@ -31,7 +31,6 @@ class FakeMatrixTimeline(
private val paginationState: MutableStateFlow<MatrixTimeline.PaginationState> = MutableStateFlow(initialPaginationState) private val paginationState: MutableStateFlow<MatrixTimeline.PaginationState> = MutableStateFlow(initialPaginationState)
private val timelineItems: MutableStateFlow<List<MatrixTimelineItem>> = MutableStateFlow(initialTimelineItems) private val timelineItems: MutableStateFlow<List<MatrixTimelineItem>> = MutableStateFlow(initialTimelineItems)
var isInitialized = false
fun updatePaginationState(update: (MatrixTimeline.PaginationState.() -> MatrixTimeline.PaginationState)) { fun updatePaginationState(update: (MatrixTimeline.PaginationState.() -> MatrixTimeline.PaginationState)) {
paginationState.value = update(paginationState.value) paginationState.value = update(paginationState.value)
@ -63,13 +62,6 @@ class FakeMatrixTimeline(
return Result.success(Unit) return Result.success(Unit)
} }
override fun initialize() {
isInitialized = true
}
override fun dispose() {
isInitialized = false
}
override suspend fun fetchDetailsForEvent(eventId: EventId): Result<Unit> { override suspend fun fetchDetailsForEvent(eventId: EventId): Result<Unit> {
return Result.success(Unit) return Result.success(Unit)

View file

@ -69,7 +69,7 @@ class RoomListScreen(
stateContentFormatter = StateContentFormatter(stringProvider), stateContentFormatter = StateContentFormatter(stringProvider),
), ),
sessionVerificationService = sessionVerificationService, sessionVerificationService = sessionVerificationService,
networkMonitor = NetworkMonitorImpl(context), networkMonitor = NetworkMonitorImpl(context, Singleton.appScope),
snackbarDispatcher = SnackbarDispatcher(), snackbarDispatcher = SnackbarDispatcher(),
inviteStateDataSource = DefaultInviteStateDataSource(matrixClient, DefaultSeenInvitesStore(context), coroutineDispatchers), inviteStateDataSource = DefaultInviteStateDataSource(matrixClient, DefaultSeenInvitesStore(context), coroutineDispatchers),
leaveRoomPresenter = LeaveRoomPresenterImpl(matrixClient, RoomMembershipObserver(), coroutineDispatchers) leaveRoomPresenter = LeaveRoomPresenterImpl(matrixClient, RoomMembershipObserver(), coroutineDispatchers)
@ -81,13 +81,11 @@ class RoomListScreen(
Singleton.appScope.launch { Singleton.appScope.launch {
withContext(coroutineDispatchers.io) { withContext(coroutineDispatchers.io) {
matrixClient.getRoom(roomId)!!.use { room -> matrixClient.getRoom(roomId)!!.use { room ->
room.open()
val timeline = room.timeline() val timeline = room.timeline()
timeline.apply { timeline.apply {
// TODO This doesn't work reliably as initialize is asynchronous, and the timeline can't be used until it's finished // TODO This doesn't work reliably as initialize is asynchronous, and the timeline can't be used until it's finished
initialize()
paginateBackwards(20, 50) paginateBackwards(20, 50)
dispose()
} }
} }
} }
@ -108,10 +106,10 @@ class RoomListScreen(
DisposableEffect(Unit) { DisposableEffect(Unit) {
Timber.w("Start sync!") Timber.w("Start sync!")
matrixClient.startSync() matrixClient.syncService().startSync()
onDispose { onDispose {
Timber.w("Stop sync!") Timber.w("Stop sync!")
matrixClient.stopSync() matrixClient.syncService().stopSync()
} }
} }
} }