Avoid getting roomInfo again. Also add a test to cover the case of non-null inviter.

This commit is contained in:
Benoit Marty 2024-04-19 10:33:19 +02:00
parent cf49677ffa
commit 87f89244a6
2 changed files with 35 additions and 15 deletions

View file

@ -40,7 +40,6 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.api.room.preview.RoomPreview
import io.element.android.libraries.matrix.ui.model.InviteSender import io.element.android.libraries.matrix.ui.model.InviteSender
import io.element.android.libraries.matrix.ui.model.toInviteSender import io.element.android.libraries.matrix.ui.model.toInviteSender
import kotlinx.coroutines.flow.first
import java.util.Optional import java.util.Optional
import kotlin.jvm.optionals.getOrNull import kotlin.jvm.optionals.getOrNull
@ -78,22 +77,16 @@ class JoinRoomPresenter @AssistedInject constructor(
else -> { else -> {
value = ContentState.Loading(roomIdOrAlias) value = ContentState.Loading(roomIdOrAlias)
val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias()) val result = matrixClient.getRoomPreview(roomId.toRoomIdOrAlias())
result.fold( value = result.fold(
onSuccess = { onSuccess = { roomPreview ->
value = it.toContentState(null) val inviteSender = roomInfo.getOrNull()
if (it.isInvited) { ?.takeIf { roomPreview.isInvited }
// Get the inviteSender ?.inviter
matrixClient.getRoomInfoFlow(roomId).first() ?.toInviteSender()
.getOrNull() roomPreview.toContentState(inviteSender)
?.inviter
?.toInviteSender()
?.let { inviteSender ->
value = it.toContentState(inviteSender)
}
}
}, },
onFailure = { throwable -> onFailure = { throwable ->
value = if (throwable.message?.contains("403") == true) { if (throwable.message?.contains("403") == true) {
ContentState.UnknownRoom(roomIdOrAlias) ContentState.UnknownRoom(roomIdOrAlias)
} else { } else {
ContentState.Failure(roomIdOrAlias, throwable) ContentState.Failure(roomIdOrAlias, throwable)

View file

@ -25,6 +25,7 @@ import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomAlias 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.RoomId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias 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.CurrentUserMembership
import io.element.android.libraries.matrix.api.room.preview.RoomPreview import io.element.android.libraries.matrix.api.room.preview.RoomPreview
@ -33,6 +34,8 @@ 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.A_ROOM_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.aRoomInfo import io.element.android.libraries.matrix.test.room.aRoomInfo
import io.element.android.libraries.matrix.test.room.aRoomMember
import io.element.android.libraries.matrix.ui.model.toInviteSender
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
import io.element.android.tests.testutils.lambda.assert import io.element.android.tests.testutils.lambda.assert
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
@ -106,6 +109,30 @@ class JoinRoomPresenterTest {
} }
} }
@Test
fun `present - when room is invited then join authorization is equal to invited, and inviter is provided`() = runTest {
val inviter = aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob")
val expectedInviteSender = inviter.toInviteSender()
val roomInfo = aRoomInfo(
currentUserMembership = CurrentUserMembership.INVITED,
inviter = inviter,
)
val matrixClient = FakeMatrixClient().apply {
getRoomInfoFlowLambda = { _ ->
flowOf(Optional.of(roomInfo))
}
}
val presenter = createJoinRoomPresenter(
matrixClient = matrixClient
)
presenter.test {
skipItems(1)
awaitItem().also { state ->
assertThat(state.joinAuthorisationStatus).isEqualTo(JoinAuthorisationStatus.IsInvited(expectedInviteSender))
}
}
}
@Test @Test
fun `present - when room is invited then accept and decline events are sent to acceptDeclinePresenter`() = runTest { fun `present - when room is invited then accept and decline events are sent to acceptDeclinePresenter`() = runTest {
val eventSinkRecorder = lambdaRecorder { _: AcceptDeclineInviteEvents -> } val eventSinkRecorder = lambdaRecorder { _: AcceptDeclineInviteEvents -> }