Update tests

This commit is contained in:
Benoit Marty 2025-09-26 11:59:29 +02:00 committed by Benoit Marty
parent 5afe213fe4
commit b4232a83fd

View file

@ -14,15 +14,12 @@ import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.MatrixClient
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_SPACE_NAME
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.room.FakeBaseRoom
import io.element.android.libraries.matrix.test.spaces.FakeSpaceRoomList
import io.element.android.libraries.matrix.test.spaces.FakeSpaceService
import io.element.android.libraries.previewutils.room.aSpaceRoom
import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.test
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.advanceUntilIdle
@ -32,16 +29,11 @@ import org.junit.Test
class LeaveSpacePresenterTest {
@Test
fun `present - initial state`() = runTest {
val paginateResult = lambdaRecorder<Result<Unit>> {
Result.success(Unit)
}
val presenter = createLeaveSpacePresenter(
matrixClient = FakeMatrixClient(
spaceService = FakeSpaceService(
spaceRoomListResult = {
FakeSpaceRoomList(
paginateResult = paginateResult,
)
FakeSpaceRoomList()
},
),
),
@ -49,10 +41,9 @@ class LeaveSpacePresenterTest {
presenter.test {
val state = awaitItem()
assertThat(state.spaceName).isNull()
assertThat(state.selectableSpaceRooms).isEqualTo(AsyncAction.Uninitialized)
assertThat(state.selectableSpaceRooms).isEqualTo(AsyncData.Uninitialized)
assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
advanceUntilIdle()
paginateResult.assertions().isCalledOnce()
skipItems(1)
}
}
@ -74,133 +65,11 @@ class LeaveSpacePresenterTest {
name = A_SPACE_NAME
)
fakeSpaceRoomList.emitCurrentSpace(aSpace)
skipItems(1)
assertThat(awaitItem().spaceName).isEqualTo(A_SPACE_NAME)
}
}
@Test
fun `present - leave space and cancel`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList(
paginateResult = { Result.success(Unit) },
)
val presenter = createLeaveSpacePresenter(
matrixClient = FakeMatrixClient(
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
),
)
presenter.test {
val state = awaitItem()
advanceUntilIdle()
assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
state.eventSink(LeaveSpaceEvents.LeaveSpace)
val stateAfterStarting = awaitItem()
assertThat(stateAfterStarting.leaveSpaceAction).isInstanceOf(LeaveSpaceState::class.java)
val shown = stateAfterStarting.leaveSpaceAction as LeaveSpaceState
assertThat(shown.spaceName).isNull()
assertThat(shown.selectableSpaceRooms).isInstanceOf(AsyncData.Loading::class.java)
val stateAfterLoading = awaitItem()
val shownLoaded = stateAfterLoading.leaveSpaceAction as LeaveSpaceState
assertThat(shownLoaded.selectableSpaceRooms.dataOrNull()!!).isEmpty()
stateAfterLoading.eventSink(LeaveSpaceEvents.CloseError)
val stateAfterCancel = awaitItem()
assertThat(stateAfterCancel.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
}
}
@Test
fun `present - leave space and confirm`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList(
paginateResult = { Result.success(Unit) },
)
val leaveRoomLambda = lambdaRecorder<Result<Unit>> {
Result.success(Unit)
}
val presenter = createLeaveSpacePresenter(
matrixClient = FakeMatrixClient(
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
).apply {
givenGetRoomResult(
roomId = A_ROOM_ID,
result = FakeBaseRoom(
leaveRoomLambda = leaveRoomLambda,
)
)
},
)
presenter.test {
val state = awaitItem()
advanceUntilIdle()
assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
state.eventSink(LeaveSpaceEvents.LeaveSpace)
val stateAfterStarting = awaitItem()
assertThat(stateAfterStarting.leaveSpaceAction).isInstanceOf(LeaveSpaceState::class.java)
val shown = stateAfterStarting.leaveSpaceAction as LeaveSpaceState
assertThat(shown.spaceName).isNull()
assertThat(shown.selectableSpaceRooms).isInstanceOf(AsyncData.Loading::class.java)
val stateAfterLoading = awaitItem()
val shownLoaded = stateAfterLoading.leaveSpaceAction as LeaveSpaceState
assertThat(shownLoaded.selectableSpaceRooms.dataOrNull()!!).isEmpty()
stateAfterLoading.eventSink(LeaveSpaceEvents.LeaveSpace)
val stateLoading = awaitItem()
assertThat(stateLoading.leaveSpaceAction).isEqualTo(AsyncAction.Loading)
val stateFinal = awaitItem()
assertThat(stateFinal.leaveSpaceAction).isEqualTo(AsyncAction.Success(Unit))
leaveRoomLambda.assertions().isCalledOnce()
}
}
@Test
fun `present - leave space, confirm then failure`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList(
paginateResult = { Result.success(Unit) },
)
val leaveRoomLambda = lambdaRecorder<Result<Unit>> {
Result.failure(AN_EXCEPTION)
}
val presenter = createLeaveSpacePresenter(
matrixClient = FakeMatrixClient(
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
).apply {
givenGetRoomResult(
roomId = A_ROOM_ID,
result = FakeBaseRoom(
leaveRoomLambda = leaveRoomLambda,
)
)
},
)
presenter.test {
val state = awaitItem()
advanceUntilIdle()
assertThat(state.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
state.eventSink(LeaveSpaceEvents.LeaveSpace)
val stateAfterStarting = awaitItem()
assertThat(stateAfterStarting.leaveSpaceAction).isInstanceOf(LeaveSpaceState::class.java)
val shown = stateAfterStarting.leaveSpaceAction as LeaveSpaceState
assertThat(shown.spaceName).isNull()
assertThat(shown.selectableSpaceRooms).isInstanceOf(AsyncData.Loading::class.java)
val stateAfterLoading = awaitItem()
val shownLoaded = stateAfterLoading.leaveSpaceAction as LeaveSpaceState
assertThat(shownLoaded.selectableSpaceRooms.dataOrNull()!!).isEmpty()
stateAfterLoading.eventSink(LeaveSpaceEvents.LeaveSpace)
val stateLoading = awaitItem()
assertThat(stateLoading.leaveSpaceAction).isEqualTo(AsyncAction.Loading)
val stateError = awaitItem()
assertThat(stateError.leaveSpaceAction).isEqualTo(AsyncAction.Failure(AN_EXCEPTION))
leaveRoomLambda.assertions().isCalledOnce()
// Close error
stateError.eventSink(LeaveSpaceEvents.CloseError)
val stateFinal = awaitItem()
assertThat(stateFinal.leaveSpaceAction).isEqualTo(AsyncAction.Uninitialized)
}
}
private fun createLeaveSpacePresenter(
inputs: SpaceEntryPoint.Inputs = SpaceEntryPoint.Inputs(A_ROOM_ID),
matrixClient: MatrixClient = FakeMatrixClient(),