diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 9488e2f142..539600d9db 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -27,6 +27,8 @@ import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.room.CurrentUserMembership +import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME import io.element.android.libraries.matrix.test.FakeMatrixClient @@ -240,6 +242,110 @@ class JoinRoomPresenterTest { } } + @Test + fun `present - when room is not known RoomPreview is loaded`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { + Result.success( + RoomPreview( + roomId = A_ROOM_ID, + canonicalAlias = RoomAlias("#alias:matrix.org"), + name = "Room name", + topic = "Room topic", + avatarUrl = "avatarUrl", + numberOfJoinedMembers = 2, + roomType = null, + isHistoryWorldReadable = false, + isJoined = false, + isInvited = false, + isPublic = true, + canKnock = false, + ) + ) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Loaded( + roomId = A_ROOM_ID, + name = "Room name", + topic = "Room topic", + alias = RoomAlias("#alias:matrix.org"), + numberOfMembers = 2, + isDirect = false, + roomAvatarUrl = "avatarUrl", + joinAuthorisationStatus = JoinAuthorisationStatus.CanJoin + ) + ) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded with error`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { + Result.failure(AN_EXCEPTION) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Failure( + roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), + error = AN_EXCEPTION + ) + ) + state.eventSink(JoinRoomEvents.Retry) + } + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Loading(A_ROOM_ID.toRoomIdOrAlias()) + ) + } + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.Failure( + roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), + error = AN_EXCEPTION + ) + ) + } + } + } + + @Test + fun `present - when room is not known RoomPreview is loaded with error 403`() = runTest { + val client = FakeMatrixClient( + getRoomPreviewResult = { + Result.failure(Exception("403")) + } + ) + val presenter = createJoinRoomPresenter( + matrixClient = client + ) + presenter.test { + skipItems(1) + awaitItem().also { state -> + assertThat(state.contentState).isEqualTo( + ContentState.UnknownRoom( + roomIdOrAlias = A_ROOM_ID.toRoomIdOrAlias(), + ) + ) + } + } + } + private fun createJoinRoomPresenter( roomId: RoomId = A_ROOM_ID, roomDescription: Optional = Optional.empty(), diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 2e24139042..e43d7655f0 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -282,11 +282,11 @@ class FakeMatrixClient( } override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result = simulateLongTask { - return resolveRoomAliasResult(roomAlias) + resolveRoomAliasResult(roomAlias) } - override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result { - return getRoomPreviewResult(roomIdOrAlias) + override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias): Result = simulateLongTask { + getRoomPreviewResult(roomIdOrAlias) } override suspend fun getRecentlyVisitedRooms(): Result> {