misc (space) : update tests after rework

This commit is contained in:
ganfra 2025-10-01 11:52:41 +02:00
parent 388cb31700
commit 0944ab0c28
4 changed files with 65 additions and 84 deletions

View file

@ -12,8 +12,12 @@ import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.testing.junit4.util.MainDispatcherRule import com.bumble.appyx.testing.junit4.util.MainDispatcherRule
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.space.api.SpaceEntryPoint import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.features.space.impl.di.FakeSpaceFlowGraph
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_ID
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.spaces.FakeSpaceRoomList
import io.element.android.libraries.matrix.test.spaces.FakeSpaceService
import io.element.android.tests.testutils.lambda.lambdaError import io.element.android.tests.testutils.lambda.lambdaError
import io.element.android.tests.testutils.node.TestParentNode import io.element.android.tests.testutils.node.TestParentNode
import org.junit.Rule import org.junit.Rule
@ -34,6 +38,12 @@ class DefaultSpaceEntryPointTest {
SpaceFlowNode( SpaceFlowNode(
buildContext = buildContext, buildContext = buildContext,
plugins = plugins, plugins = plugins,
matrixClient = FakeMatrixClient(
spaceService = FakeSpaceService(
spaceRoomListResult = { _: RoomId -> FakeSpaceRoomList(A_ROOM_ID) }
)
),
graphFactory = FakeSpaceFlowGraph.Factory
) )
} }
val callback = object : SpaceEntryPoint.Callback { val callback = object : SpaceEntryPoint.Callback {

View file

@ -0,0 +1,25 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.space.impl.di
import com.bumble.appyx.core.node.Node
import io.element.android.libraries.architecture.AssistedNodeFactory
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
import kotlin.reflect.KClass
class FakeSpaceFlowGraph : SpaceFlowGraph {
object Factory : SpaceFlowGraph.Factory {
override fun create(spaceRoomList: SpaceRoomList): SpaceFlowGraph {
return FakeSpaceFlowGraph()
}
}
override fun nodeFactories(): Map<KClass<out Node>, AssistedNodeFactory<*>> {
return emptyMap()
}
}

View file

@ -10,15 +10,11 @@
package io.element.android.features.space.impl.leave package io.element.android.features.space.impl.leave
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
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.A_SPACE_NAME
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.spaces.FakeSpaceRoomList 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.libraries.previewutils.room.aSpaceRoom
import io.element.android.tests.testutils.test import io.element.android.tests.testutils.test
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
@ -29,15 +25,7 @@ import org.junit.Test
class LeaveSpacePresenterTest { class LeaveSpacePresenterTest {
@Test @Test
fun `present - initial state`() = runTest { fun `present - initial state`() = runTest {
val presenter = createLeaveSpacePresenter( val presenter = createLeaveSpacePresenter()
matrixClient = FakeMatrixClient(
spaceService = FakeSpaceService(
spaceRoomListResult = {
FakeSpaceRoomList()
},
),
),
)
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
assertThat(state.spaceName).isNull() assertThat(state.spaceName).isNull()
@ -51,11 +39,7 @@ class LeaveSpacePresenterTest {
fun `present - current space name`() = runTest { fun `present - current space name`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList() val fakeSpaceRoomList = FakeSpaceRoomList()
val presenter = createLeaveSpacePresenter( val presenter = createLeaveSpacePresenter(
matrixClient = FakeMatrixClient( spaceRoomList = fakeSpaceRoomList,
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
),
) )
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
@ -71,12 +55,10 @@ class LeaveSpacePresenterTest {
} }
private fun createLeaveSpacePresenter( private fun createLeaveSpacePresenter(
inputs: SpaceEntryPoint.Inputs = SpaceEntryPoint.Inputs(A_ROOM_ID), spaceRoomList: SpaceRoomList = FakeSpaceRoomList(),
matrixClient: MatrixClient = FakeMatrixClient(),
): LeaveSpacePresenter { ): LeaveSpacePresenter {
return LeaveSpacePresenter( return LeaveSpacePresenter(
inputs = inputs, spaceRoomList = spaceRoomList,
matrixClient = matrixClient,
) )
} }
} }

View file

@ -12,13 +12,10 @@ package io.element.android.features.space.impl.root
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.SeenInvitesStore
import io.element.android.features.invite.test.InMemorySeenInvitesStore import io.element.android.features.invite.test.InMemorySeenInvitesStore
import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
import io.element.android.libraries.matrix.test.A_ROOM_ID
import io.element.android.libraries.matrix.test.FakeMatrixClient import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.spaces.FakeSpaceRoomList 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.libraries.previewutils.room.aSpaceRoom
import io.element.android.tests.testutils.lambda.lambdaRecorder import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.test import io.element.android.tests.testutils.test
@ -33,17 +30,8 @@ class SpacePresenterTest {
val paginateResult = lambdaRecorder<Result<Unit>> { val paginateResult = lambdaRecorder<Result<Unit>> {
Result.success(Unit) Result.success(Unit)
} }
val presenter = createSpacePresenter( val spaceRoomList = FakeSpaceRoomList(paginateResult = paginateResult)
client = FakeMatrixClient( val presenter = createSpacePresenter(spaceRoomList = spaceRoomList)
spaceService = FakeSpaceService(
spaceRoomListResult = {
FakeSpaceRoomList(
paginateResult = paginateResult,
)
},
),
),
)
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
assertThat(state.currentSpace).isNull() assertThat(state.currentSpace).isNull()
@ -61,17 +49,8 @@ class SpacePresenterTest {
val paginateResult = lambdaRecorder<Result<Unit>> { val paginateResult = lambdaRecorder<Result<Unit>> {
Result.success(Unit) Result.success(Unit)
} }
val presenter = createSpacePresenter( val spaceRoomList = FakeSpaceRoomList(paginateResult = paginateResult)
client = FakeMatrixClient( val presenter = createSpacePresenter(spaceRoomList = spaceRoomList)
spaceService = FakeSpaceService(
spaceRoomListResult = {
FakeSpaceRoomList(
paginateResult = paginateResult,
)
},
),
),
)
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
advanceUntilIdle() advanceUntilIdle()
@ -84,25 +63,20 @@ class SpacePresenterTest {
@Test @Test
fun `present - has more to load value`() = runTest { fun `present - has more to load value`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList( val paginateResult = lambdaRecorder<Result<Unit>> {
paginateResult = { Result.success(Unit) }, Result.success(Unit)
) }
val presenter = createSpacePresenter( val spaceRoomList = FakeSpaceRoomList(paginateResult = paginateResult)
client = FakeMatrixClient( val presenter = createSpacePresenter(spaceRoomList = spaceRoomList)
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
),
)
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
advanceUntilIdle() advanceUntilIdle()
assertThat(state.hasMoreToLoad).isTrue() assertThat(state.hasMoreToLoad).isTrue()
fakeSpaceRoomList.emitPaginationStatus( spaceRoomList.emitPaginationStatus(
SpaceRoomList.PaginationStatus.Idle(hasMoreToLoad = false) SpaceRoomList.PaginationStatus.Idle(hasMoreToLoad = false)
) )
assertThat(awaitItem().hasMoreToLoad).isFalse() assertThat(awaitItem().hasMoreToLoad).isFalse()
fakeSpaceRoomList.emitPaginationStatus( spaceRoomList.emitPaginationStatus(
SpaceRoomList.PaginationStatus.Idle(hasMoreToLoad = true) SpaceRoomList.PaginationStatus.Idle(hasMoreToLoad = true)
) )
assertThat(awaitItem().hasMoreToLoad).isTrue() assertThat(awaitItem().hasMoreToLoad).isTrue()
@ -111,56 +85,46 @@ class SpacePresenterTest {
@Test @Test
fun `present - current space value`() = runTest { fun `present - current space value`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList( val paginateResult = lambdaRecorder<Result<Unit>> {
paginateResult = { Result.success(Unit) }, Result.success(Unit)
) }
val presenter = createSpacePresenter( val spaceRoomList = FakeSpaceRoomList(paginateResult = paginateResult)
client = FakeMatrixClient( val presenter = createSpacePresenter(spaceRoomList = spaceRoomList)
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
),
)
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
advanceUntilIdle() advanceUntilIdle()
assertThat(state.currentSpace).isNull() assertThat(state.currentSpace).isNull()
val aSpace = aSpaceRoom() val aSpace = aSpaceRoom()
fakeSpaceRoomList.emitCurrentSpace(aSpace) spaceRoomList.emitCurrentSpace(aSpace)
assertThat(awaitItem().currentSpace).isEqualTo(aSpace) assertThat(awaitItem().currentSpace).isEqualTo(aSpace)
} }
} }
@Test @Test
fun `present - children value`() = runTest { fun `present - children value`() = runTest {
val fakeSpaceRoomList = FakeSpaceRoomList( val paginateResult = lambdaRecorder<Result<Unit>> {
paginateResult = { Result.success(Unit) }, Result.success(Unit)
) }
val presenter = createSpacePresenter( val spaceRoomList = FakeSpaceRoomList(paginateResult = paginateResult)
client = FakeMatrixClient( val presenter = createSpacePresenter(spaceRoomList = spaceRoomList)
spaceService = FakeSpaceService(
spaceRoomListResult = { fakeSpaceRoomList },
),
),
)
presenter.test { presenter.test {
val state = awaitItem() val state = awaitItem()
advanceUntilIdle() advanceUntilIdle()
assertThat(state.children).isEmpty() assertThat(state.children).isEmpty()
val aSpace = aSpaceRoom() val aSpace = aSpaceRoom()
fakeSpaceRoomList.emitSpaceRooms(listOf(aSpace)) spaceRoomList.emitSpaceRooms(listOf(aSpace))
assertThat(awaitItem().children).containsExactly(aSpace) assertThat(awaitItem().children).containsExactly(aSpace)
} }
} }
private fun createSpacePresenter( private fun createSpacePresenter(
inputs: SpaceEntryPoint.Inputs = SpaceEntryPoint.Inputs(A_ROOM_ID),
client: MatrixClient = FakeMatrixClient(), client: MatrixClient = FakeMatrixClient(),
spaceRoomList: SpaceRoomList = FakeSpaceRoomList(),
seenInvitesStore: SeenInvitesStore = InMemorySeenInvitesStore(), seenInvitesStore: SeenInvitesStore = InMemorySeenInvitesStore(),
): SpacePresenter { ): SpacePresenter {
return SpacePresenter( return SpacePresenter(
inputs = inputs,
client = client, client = client,
spaceRoomList = spaceRoomList,
seenInvitesStore = seenInvitesStore, seenInvitesStore = seenInvitesStore,
) )
} }