|
|
@ -21,8 +21,12 @@ import app.cash.molecule.moleculeFlow |
|
|
|
import app.cash.turbine.test |
|
|
|
import app.cash.turbine.test |
|
|
|
import com.google.common.truth.Truth |
|
|
|
import com.google.common.truth.Truth |
|
|
|
import io.element.android.features.leaveroom.api.LeaveRoomEvent |
|
|
|
import io.element.android.features.leaveroom.api.LeaveRoomEvent |
|
|
|
|
|
|
|
import io.element.android.features.leaveroom.api.LeaveRoomPresenter |
|
|
|
import io.element.android.features.leaveroom.fake.LeaveRoomPresenterFake |
|
|
|
import io.element.android.features.leaveroom.fake.LeaveRoomPresenterFake |
|
|
|
|
|
|
|
import io.element.android.features.networkmonitor.api.NetworkMonitor |
|
|
|
import io.element.android.features.networkmonitor.test.FakeNetworkMonitor |
|
|
|
import io.element.android.features.networkmonitor.test.FakeNetworkMonitor |
|
|
|
|
|
|
|
import io.element.android.features.roomlist.impl.datasource.InviteStateDataSource |
|
|
|
|
|
|
|
import io.element.android.features.roomlist.impl.datasource.RoomListDataSource |
|
|
|
import io.element.android.features.roomlist.impl.model.RoomListRoomSummary |
|
|
|
import io.element.android.features.roomlist.impl.model.RoomListRoomSummary |
|
|
|
import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary |
|
|
|
import io.element.android.features.roomlist.impl.model.aRoomListRoomSummary |
|
|
|
import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormatter |
|
|
|
import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormatter |
|
|
@ -30,7 +34,10 @@ import io.element.android.libraries.dateformatter.test.FakeLastMessageTimestampF |
|
|
|
import io.element.android.libraries.designsystem.components.avatar.AvatarData |
|
|
|
import io.element.android.libraries.designsystem.components.avatar.AvatarData |
|
|
|
import io.element.android.libraries.designsystem.components.avatar.AvatarSize |
|
|
|
import io.element.android.libraries.designsystem.components.avatar.AvatarSize |
|
|
|
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher |
|
|
|
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher |
|
|
|
|
|
|
|
import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter |
|
|
|
import io.element.android.libraries.eventformatter.test.FakeRoomLastMessageFormatter |
|
|
|
import io.element.android.libraries.eventformatter.test.FakeRoomLastMessageFormatter |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.MatrixClient |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.api.verification.SessionVerificationService |
|
|
|
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus |
|
|
|
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus |
|
|
|
import io.element.android.libraries.matrix.test.AN_AVATAR_URL |
|
|
|
import io.element.android.libraries.matrix.test.AN_AVATAR_URL |
|
|
|
import io.element.android.libraries.matrix.test.AN_EXCEPTION |
|
|
|
import io.element.android.libraries.matrix.test.AN_EXCEPTION |
|
|
@ -42,7 +49,9 @@ 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.FakeRoomSummaryDataSource |
|
|
|
import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled |
|
|
|
import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled |
|
|
|
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService |
|
|
|
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService |
|
|
|
|
|
|
|
import io.element.android.tests.testutils.testCoroutineDispatchers |
|
|
|
import kotlinx.coroutines.flow.MutableStateFlow |
|
|
|
import kotlinx.coroutines.flow.MutableStateFlow |
|
|
|
|
|
|
|
import kotlinx.coroutines.test.TestScope |
|
|
|
import kotlinx.coroutines.test.runTest |
|
|
|
import kotlinx.coroutines.test.runTest |
|
|
|
import org.junit.Test |
|
|
|
import org.junit.Test |
|
|
|
|
|
|
|
|
|
|
@ -50,17 +59,7 @@ class RoomListPresenterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - should start with no user and then load user with success`() = runTest { |
|
|
|
fun `present - should start with no user and then load user with success`() = runTest { |
|
|
|
val matrixClient = FakeMatrixClient() |
|
|
|
val presenter = aRoomListPresenter() |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
|
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
@ -80,16 +79,7 @@ class RoomListPresenterTests { |
|
|
|
userDisplayName = Result.failure(AN_EXCEPTION), |
|
|
|
userDisplayName = Result.failure(AN_EXCEPTION), |
|
|
|
userAvatarURLString = Result.failure(AN_EXCEPTION), |
|
|
|
userAvatarURLString = Result.failure(AN_EXCEPTION), |
|
|
|
) |
|
|
|
) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
val presenter = aRoomListPresenter(matrixClient) |
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
@ -102,17 +92,7 @@ class RoomListPresenterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - should filter room with success`() = runTest { |
|
|
|
fun `present - should filter room with success`() = runTest { |
|
|
|
val matrixClient = FakeMatrixClient() |
|
|
|
val presenter = aRoomListPresenter() |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
|
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
@ -133,26 +113,16 @@ class RoomListPresenterTests { |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
) |
|
|
|
) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
val presenter = aRoomListPresenter(matrixClient) |
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
skipItems(1) |
|
|
|
skipItems(1) |
|
|
|
val withUserState = awaitItem() |
|
|
|
val initialState = awaitItem() |
|
|
|
// Room list is loaded with 16 placeholders |
|
|
|
// Room list is loaded with 16 placeholders |
|
|
|
Truth.assertThat(withUserState.roomList.size).isEqualTo(16) |
|
|
|
Truth.assertThat(initialState.roomList.size).isEqualTo(16) |
|
|
|
Truth.assertThat(withUserState.roomList.all { it.isPlaceholder }).isTrue() |
|
|
|
Truth.assertThat(initialState.roomList.all { it.isPlaceholder }).isTrue() |
|
|
|
roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled())) |
|
|
|
roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled())) |
|
|
|
skipItems(1) |
|
|
|
|
|
|
|
val withRoomState = awaitItem() |
|
|
|
val withRoomState = awaitItem() |
|
|
|
Truth.assertThat(withRoomState.roomList.size).isEqualTo(1) |
|
|
|
Truth.assertThat(withRoomState.roomList.size).isEqualTo(1) |
|
|
|
Truth.assertThat(withRoomState.roomList.first()) |
|
|
|
Truth.assertThat(withRoomState.roomList.first()) |
|
|
@ -166,21 +136,12 @@ class RoomListPresenterTests { |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
) |
|
|
|
) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
val presenter = aRoomListPresenter(matrixClient) |
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled())) |
|
|
|
roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled())) |
|
|
|
skipItems(3) |
|
|
|
skipItems(1) |
|
|
|
val loadedState = awaitItem() |
|
|
|
val loadedState = awaitItem() |
|
|
|
// Test filtering with result |
|
|
|
// Test filtering with result |
|
|
|
loadedState.eventSink.invoke(RoomListEvents.UpdateFilter(A_ROOM_NAME.substring(0, 3))) |
|
|
|
loadedState.eventSink.invoke(RoomListEvents.UpdateFilter(A_ROOM_NAME.substring(0, 3))) |
|
|
@ -193,9 +154,8 @@ class RoomListPresenterTests { |
|
|
|
// Test filtering without result |
|
|
|
// Test filtering without result |
|
|
|
withNotFilteredRoomState.eventSink.invoke(RoomListEvents.UpdateFilter("tada")) |
|
|
|
withNotFilteredRoomState.eventSink.invoke(RoomListEvents.UpdateFilter("tada")) |
|
|
|
skipItems(1) // Filter update |
|
|
|
skipItems(1) // Filter update |
|
|
|
val withFilteredRoomState = awaitItem() |
|
|
|
Truth.assertThat(awaitItem().filter).isEqualTo("tada") |
|
|
|
Truth.assertThat(withFilteredRoomState.filter).isEqualTo("tada") |
|
|
|
Truth.assertThat(awaitItem().filteredRoomList).isEmpty() |
|
|
|
Truth.assertThat(withFilteredRoomState.filteredRoomList).isEmpty() |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -205,21 +165,11 @@ class RoomListPresenterTests { |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
) |
|
|
|
) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
val presenter = aRoomListPresenter(matrixClient) |
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled())) |
|
|
|
roomSummaryDataSource.postAllRooms(listOf(aRoomSummaryFilled())) |
|
|
|
skipItems(3) |
|
|
|
|
|
|
|
val loadedState = awaitItem() |
|
|
|
val loadedState = awaitItem() |
|
|
|
// check initial value |
|
|
|
// check initial value |
|
|
|
Truth.assertThat(roomSummaryDataSource.latestSlidingSyncRange).isNull() |
|
|
|
Truth.assertThat(roomSummaryDataSource.latestSlidingSyncRange).isNull() |
|
|
@ -245,6 +195,7 @@ class RoomListPresenterTests { |
|
|
|
loadedState.eventSink.invoke(RoomListEvents.UpdateVisibleRange(IntRange(149, 259))) |
|
|
|
loadedState.eventSink.invoke(RoomListEvents.UpdateVisibleRange(IntRange(149, 259))) |
|
|
|
Truth.assertThat(roomSummaryDataSource.latestSlidingSyncRange) |
|
|
|
Truth.assertThat(roomSummaryDataSource.latestSlidingSyncRange) |
|
|
|
.isEqualTo(IntRange(129, 279)) |
|
|
|
.isEqualTo(IntRange(129, 279)) |
|
|
|
|
|
|
|
cancelAndIgnoreRemainingEvents() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -254,18 +205,12 @@ class RoomListPresenterTests { |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
val matrixClient = FakeMatrixClient( |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
roomSummaryDataSource = roomSummaryDataSource |
|
|
|
) |
|
|
|
) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
val presenter = aRoomListPresenter( |
|
|
|
matrixClient, |
|
|
|
client = matrixClient, |
|
|
|
createDateFormatter(), |
|
|
|
sessionVerificationService = FakeSessionVerificationService().apply { |
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService().apply { |
|
|
|
|
|
|
|
givenIsReady(true) |
|
|
|
givenIsReady(true) |
|
|
|
givenVerifiedStatus(SessionVerifiedStatus.NotVerified) |
|
|
|
givenVerifiedStatus(SessionVerifiedStatus.NotVerified) |
|
|
|
}, |
|
|
|
}, |
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
) |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
@ -281,22 +226,12 @@ class RoomListPresenterTests { |
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - sets invite state`() = runTest { |
|
|
|
fun `present - sets invite state`() = runTest { |
|
|
|
val inviteStateFlow = MutableStateFlow(InvitesState.NoInvites) |
|
|
|
val inviteStateFlow = MutableStateFlow(InvitesState.NoInvites) |
|
|
|
val matrixClient = FakeMatrixClient() |
|
|
|
val inviteStateDataSource = FakeInviteDataSource(inviteStateFlow) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
val presenter = aRoomListPresenter(inviteStateDataSource = inviteStateDataSource) |
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(inviteStateFlow), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
skipItems(1) |
|
|
|
skipItems(1) |
|
|
|
|
|
|
|
|
|
|
|
Truth.assertThat(awaitItem().invitesState).isEqualTo(InvitesState.NoInvites) |
|
|
|
Truth.assertThat(awaitItem().invitesState).isEqualTo(InvitesState.NoInvites) |
|
|
|
|
|
|
|
|
|
|
|
inviteStateFlow.value = InvitesState.SeenInvites |
|
|
|
inviteStateFlow.value = InvitesState.SeenInvites |
|
|
@ -312,17 +247,7 @@ class RoomListPresenterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - show context menu`() = runTest { |
|
|
|
fun `present - show context menu`() = runTest { |
|
|
|
val matrixClient = FakeMatrixClient() |
|
|
|
val presenter = aRoomListPresenter() |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
|
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
@ -340,17 +265,7 @@ class RoomListPresenterTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - hide context menu`() = runTest { |
|
|
|
fun `present - hide context menu`() = runTest { |
|
|
|
val matrixClient = FakeMatrixClient() |
|
|
|
val presenter = aRoomListPresenter() |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
|
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
@ -373,34 +288,42 @@ class RoomListPresenterTests { |
|
|
|
@Test |
|
|
|
@Test |
|
|
|
fun `present - leave room calls into leave room presenter`() = runTest { |
|
|
|
fun `present - leave room calls into leave room presenter`() = runTest { |
|
|
|
val leaveRoomPresenter = LeaveRoomPresenterFake() |
|
|
|
val leaveRoomPresenter = LeaveRoomPresenterFake() |
|
|
|
val matrixClient = FakeMatrixClient() |
|
|
|
val presenter = aRoomListPresenter(leaveRoomPresenter = leaveRoomPresenter) |
|
|
|
val presenter = RoomListPresenter( |
|
|
|
|
|
|
|
matrixClient, |
|
|
|
|
|
|
|
createDateFormatter(), |
|
|
|
|
|
|
|
FakeRoomLastMessageFormatter(), |
|
|
|
|
|
|
|
FakeSessionVerificationService(), |
|
|
|
|
|
|
|
FakeNetworkMonitor(), |
|
|
|
|
|
|
|
SnackbarDispatcher(), |
|
|
|
|
|
|
|
FakeInviteDataSource(), |
|
|
|
|
|
|
|
leaveRoomPresenter, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
moleculeFlow(RecompositionClock.Immediate) { |
|
|
|
presenter.present() |
|
|
|
presenter.present() |
|
|
|
}.test { |
|
|
|
}.test { |
|
|
|
skipItems(1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val initialState = awaitItem() |
|
|
|
val initialState = awaitItem() |
|
|
|
initialState.eventSink(RoomListEvents.LeaveRoom(A_ROOM_ID)) |
|
|
|
initialState.eventSink(RoomListEvents.LeaveRoom(A_ROOM_ID)) |
|
|
|
|
|
|
|
|
|
|
|
Truth.assertThat(leaveRoomPresenter.events).containsExactly(LeaveRoomEvent.ShowConfirmation(A_ROOM_ID)) |
|
|
|
Truth.assertThat(leaveRoomPresenter.events).containsExactly(LeaveRoomEvent.ShowConfirmation(A_ROOM_ID)) |
|
|
|
|
|
|
|
cancelAndIgnoreRemainingEvents() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun createDateFormatter(): LastMessageTimestampFormatter { |
|
|
|
private fun TestScope.aRoomListPresenter( |
|
|
|
return FakeLastMessageTimestampFormatter().apply { |
|
|
|
client: MatrixClient = FakeMatrixClient(), |
|
|
|
|
|
|
|
sessionVerificationService: SessionVerificationService = FakeSessionVerificationService(), |
|
|
|
|
|
|
|
networkMonitor: NetworkMonitor = FakeNetworkMonitor(), |
|
|
|
|
|
|
|
snackbarDispatcher: SnackbarDispatcher = SnackbarDispatcher(), |
|
|
|
|
|
|
|
inviteStateDataSource: InviteStateDataSource = FakeInviteDataSource(), |
|
|
|
|
|
|
|
leaveRoomPresenter: LeaveRoomPresenter = LeaveRoomPresenterFake(), |
|
|
|
|
|
|
|
lastMessageTimestampFormatter: LastMessageTimestampFormatter = FakeLastMessageTimestampFormatter().apply { |
|
|
|
givenFormat(A_FORMATTED_DATE) |
|
|
|
givenFormat(A_FORMATTED_DATE) |
|
|
|
} |
|
|
|
}, |
|
|
|
} |
|
|
|
roomLastMessageFormatter: RoomLastMessageFormatter = FakeRoomLastMessageFormatter() |
|
|
|
|
|
|
|
) = RoomListPresenter( |
|
|
|
|
|
|
|
client = client, |
|
|
|
|
|
|
|
sessionVerificationService = sessionVerificationService, |
|
|
|
|
|
|
|
networkMonitor = networkMonitor, |
|
|
|
|
|
|
|
snackbarDispatcher = snackbarDispatcher, |
|
|
|
|
|
|
|
inviteStateDataSource = inviteStateDataSource, |
|
|
|
|
|
|
|
leaveRoomPresenter = leaveRoomPresenter, |
|
|
|
|
|
|
|
roomListDataSource = RoomListDataSource( |
|
|
|
|
|
|
|
client.roomSummaryDataSource, |
|
|
|
|
|
|
|
lastMessageTimestampFormatter, |
|
|
|
|
|
|
|
roomLastMessageFormatter, |
|
|
|
|
|
|
|
coroutineDispatchers = testCoroutineDispatchers() |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private const val A_FORMATTED_DATE = "formatted_date" |
|
|
|
private const val A_FORMATTED_DATE = "formatted_date" |
|
|
|