Skip to content

Commit 63706c0

Browse files
committed
Add tests on HomeSpacesPresenter
1 parent 8faa286 commit 63706c0

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

features/home/impl/src/test/kotlin/io/element/android/features/home/impl/HomePresenterTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import app.cash.molecule.moleculeFlow
1212
import app.cash.turbine.test
1313
import com.google.common.truth.Truth.assertThat
1414
import io.element.android.features.home.impl.roomlist.aRoomListState
15+
import io.element.android.features.home.impl.spaces.aHomeSpacesState
1516
import io.element.android.features.logout.api.direct.aDirectLogoutState
1617
import io.element.android.features.rageshake.api.RageshakeFeatureAvailability
1718
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
@@ -158,6 +159,7 @@ class HomePresenterTest {
158159
indicatorService = indicatorService,
159160
logoutPresenter = { aDirectLogoutState() },
160161
roomListPresenter = { aRoomListState() },
162+
homeSpacesPresenter = { aHomeSpacesState() },
161163
rageshakeFeatureAvailability = rageshakeFeatureAvailability,
162164
featureFlagService = featureFlagService,
163165
)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.features.home.impl.spaces
9+
10+
import com.google.common.truth.Truth.assertThat
11+
import io.element.android.features.invite.api.SeenInvitesStore
12+
import io.element.android.features.invite.test.InMemorySeenInvitesStore
13+
import io.element.android.libraries.matrix.api.MatrixClient
14+
import io.element.android.libraries.matrix.test.FakeMatrixClient
15+
import io.element.android.tests.testutils.test
16+
import kotlinx.coroutines.test.runTest
17+
import org.junit.Test
18+
19+
class HomeSpacesPresenterTest {
20+
@Test
21+
fun `present - initial state`() = runTest {
22+
val presenter = createPresenter()
23+
presenter.test {
24+
val state = awaitItem()
25+
assertThat(state.space).isEqualTo(CurrentSpace.Root)
26+
assertThat(state.spaceRooms).isEmpty()
27+
assertThat(state.hideInvitesAvatar).isFalse()
28+
assertThat(state.seenSpaceInvites).isEmpty()
29+
}
30+
}
31+
32+
private fun createPresenter(
33+
client: MatrixClient = FakeMatrixClient(),
34+
seenInvitesStore: SeenInvitesStore = InMemorySeenInvitesStore(),
35+
) = HomeSpacesPresenter(
36+
client = client,
37+
seenInvitesStore = seenInvitesStore,
38+
)
39+
}

libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
3030
import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias
3131
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
3232
import io.element.android.libraries.matrix.api.roomlist.RoomListService
33+
import io.element.android.libraries.matrix.api.spaces.SpaceService
3334
import io.element.android.libraries.matrix.api.sync.SlidingSyncVersion
3435
import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults
3536
import io.element.android.libraries.matrix.api.user.MatrixUser
@@ -42,6 +43,7 @@ import io.element.android.libraries.matrix.test.notificationsettings.FakeNotific
4243
import io.element.android.libraries.matrix.test.pushers.FakePushersService
4344
import io.element.android.libraries.matrix.test.roomdirectory.FakeRoomDirectoryService
4445
import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService
46+
import io.element.android.libraries.matrix.test.spaces.FakeSpaceService
4547
import io.element.android.libraries.matrix.test.sync.FakeSyncService
4648
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService
4749
import io.element.android.tests.testutils.lambda.lambdaError
@@ -65,6 +67,7 @@ class FakeMatrixClient(
6567
private val userDisplayName: String? = A_USER_NAME,
6668
private val userAvatarUrl: String? = AN_AVATAR_URL,
6769
override val roomListService: RoomListService = FakeRoomListService(),
70+
override val spaceService: SpaceService = FakeSpaceService(),
6871
override val mediaLoader: MatrixMediaLoader = FakeMatrixMediaLoader(),
6972
private val sessionVerificationService: FakeSessionVerificationService = FakeSessionVerificationService(),
7073
private val pushersService: FakePushersService = FakePushersService(),
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.matrix.test.spaces
9+
10+
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
11+
import io.element.android.libraries.matrix.api.spaces.SpaceService
12+
import io.element.android.tests.testutils.lambda.lambdaError
13+
import io.element.android.tests.testutils.simulateLongTask
14+
import kotlinx.coroutines.flow.MutableSharedFlow
15+
import kotlinx.coroutines.flow.SharedFlow
16+
import kotlinx.coroutines.flow.asSharedFlow
17+
18+
class FakeSpaceService(
19+
private val joinedSpacesResult: () -> Result<List<SpaceRoom>> = { lambdaError() }
20+
) : SpaceService {
21+
private val _spaceRooms = MutableSharedFlow<List<SpaceRoom>>()
22+
override val spaceRooms: SharedFlow<List<SpaceRoom>>
23+
get() = _spaceRooms.asSharedFlow()
24+
25+
suspend fun emitSpaceRoomList(value: List<SpaceRoom>) {
26+
_spaceRooms.emit(value)
27+
}
28+
29+
override suspend fun joinedSpaces(): Result<List<SpaceRoom>> = simulateLongTask {
30+
return joinedSpacesResult()
31+
}
32+
}

0 commit comments

Comments
 (0)