Fix quality
This commit is contained in:
parent
a7928eb2e6
commit
94876f2dee
5 changed files with 23 additions and 31 deletions
|
|
@ -24,13 +24,12 @@ import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runUpdatingState
|
import io.element.android.libraries.architecture.runUpdatingState
|
||||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||||
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
|
||||||
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
|
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
|
||||||
import io.element.android.libraries.matrix.api.spaces.SpaceService
|
import io.element.android.libraries.matrix.api.spaces.SpaceService
|
||||||
import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
|
import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toPersistentList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.awaitAll
|
import kotlinx.coroutines.awaitAll
|
||||||
|
|
@ -42,10 +41,9 @@ class AddRoomToSpacePresenter(
|
||||||
private val spaceService: SpaceService,
|
private val spaceService: SpaceService,
|
||||||
private val dataSourceFactory: AddRoomToSpaceSearchDataSource.Factory,
|
private val dataSourceFactory: AddRoomToSpaceSearchDataSource.Factory,
|
||||||
) : Presenter<AddRoomToSpaceState> {
|
) : Presenter<AddRoomToSpaceState> {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): AddRoomToSpaceState {
|
override fun present(): AddRoomToSpaceState {
|
||||||
var selectedRooms by remember { mutableStateOf(persistentListOf<SelectRoomInfo>()) }
|
var selectedRooms: ImmutableList<SelectRoomInfo> by remember { mutableStateOf(persistentListOf()) }
|
||||||
var searchQuery by remember { mutableStateOf("") }
|
var searchQuery by remember { mutableStateOf("") }
|
||||||
var isSearchActive by remember { mutableStateOf(false) }
|
var isSearchActive by remember { mutableStateOf(false) }
|
||||||
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
||||||
|
|
@ -78,9 +76,9 @@ class AddRoomToSpacePresenter(
|
||||||
when (event) {
|
when (event) {
|
||||||
is AddRoomToSpaceEvent.ToggleRoom -> {
|
is AddRoomToSpaceEvent.ToggleRoom -> {
|
||||||
selectedRooms = if (selectedRooms.any { it.roomId == event.room.roomId }) {
|
selectedRooms = if (selectedRooms.any { it.roomId == event.room.roomId }) {
|
||||||
selectedRooms.filterNot { it.roomId == event.room.roomId }.toPersistentList()
|
selectedRooms.filterNot { it.roomId == event.room.roomId }.toImmutableList()
|
||||||
} else {
|
} else {
|
||||||
(selectedRooms + event.room).toPersistentList()
|
(selectedRooms + event.room).toImmutableList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is AddRoomToSpaceEvent.UpdateSearchQuery -> {
|
is AddRoomToSpaceEvent.UpdateSearchQuery -> {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ package io.element.android.features.space.impl.addroom
|
||||||
import dev.zacsweers.metro.Assisted
|
import dev.zacsweers.metro.Assisted
|
||||||
import dev.zacsweers.metro.AssistedFactory
|
import dev.zacsweers.metro.AssistedFactory
|
||||||
import dev.zacsweers.metro.AssistedInject
|
import dev.zacsweers.metro.AssistedInject
|
||||||
import dev.zacsweers.metro.Inject
|
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
@ -52,7 +51,6 @@ class AddRoomToSpaceSearchDataSource(
|
||||||
private val matrixClient: MatrixClient,
|
private val matrixClient: MatrixClient,
|
||||||
private val coroutineDispatchers: CoroutineDispatchers,
|
private val coroutineDispatchers: CoroutineDispatchers,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
fun create(coroutineScope: CoroutineScope): AddRoomToSpaceSearchDataSource
|
fun create(coroutineScope: CoroutineScope): AddRoomToSpaceSearchDataSource
|
||||||
|
|
|
||||||
|
|
@ -171,8 +171,8 @@ fun AddRoomToSpaceView(
|
||||||
}
|
}
|
||||||
SaveActionView(
|
SaveActionView(
|
||||||
saveAction = state.saveAction,
|
saveAction = state.saveAction,
|
||||||
onRetry = { state.eventSink(AddRoomToSpaceEvent.Save)},
|
onRetry = { state.eventSink(AddRoomToSpaceEvent.Save) },
|
||||||
onDismiss = {state.eventSink(AddRoomToSpaceEvent.ResetSaveAction)}
|
onDismiss = { state.eventSink(AddRoomToSpaceEvent.ResetSaveAction) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,17 +15,14 @@ import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
||||||
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.room.CurrentUserMembership
|
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID_2
|
|
||||||
import io.element.android.libraries.matrix.test.AN_EXCEPTION
|
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.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.aRoomSummary
|
import io.element.android.libraries.matrix.test.room.aRoomSummary
|
||||||
import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService
|
import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService
|
||||||
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.matrix.test.spaces.FakeSpaceService
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.lambda.value
|
|
||||||
import io.element.android.tests.testutils.test
|
import io.element.android.tests.testutils.test
|
||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
@ -38,7 +35,7 @@ import org.junit.Test
|
||||||
class AddRoomToSpacePresenterTest {
|
class AddRoomToSpacePresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - initial state has empty selection and no search`() = runTest {
|
fun `present - initial state has empty selection and no search`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
assertThat(state.selectedRooms).isEmpty()
|
assertThat(state.selectedRooms).isEmpty()
|
||||||
|
|
@ -51,7 +48,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - ToggleRoom adds room to selection`() = runTest {
|
fun `present - ToggleRoom adds room to selection`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
val room = aSelectRoomInfoList().first()
|
val room = aSelectRoomInfoList().first()
|
||||||
|
|
@ -65,7 +62,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - ToggleRoom removes already selected room`() = runTest {
|
fun `present - ToggleRoom removes already selected room`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
val room = aSelectRoomInfoList().first()
|
val room = aSelectRoomInfoList().first()
|
||||||
|
|
@ -83,7 +80,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - UpdateSearchQuery updates query`() = runTest {
|
fun `present - UpdateSearchQuery updates query`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
state.eventSink(AddRoomToSpaceEvent.UpdateSearchQuery("test"))
|
state.eventSink(AddRoomToSpaceEvent.UpdateSearchQuery("test"))
|
||||||
|
|
@ -94,7 +91,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - OnSearchActiveChanged activates search`() = runTest {
|
fun `present - OnSearchActiveChanged activates search`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
state.eventSink(AddRoomToSpaceEvent.OnSearchActiveChanged(true))
|
state.eventSink(AddRoomToSpaceEvent.OnSearchActiveChanged(true))
|
||||||
|
|
@ -105,7 +102,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - OnSearchActiveChanged deactivates search and clears query`() = runTest {
|
fun `present - OnSearchActiveChanged deactivates search and clears query`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
// Activate search and set query
|
// Activate search and set query
|
||||||
|
|
@ -124,7 +121,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - CloseSearch deactivates and clears query`() = runTest {
|
fun `present - CloseSearch deactivates and clears query`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
// Activate search and set query
|
// Activate search and set query
|
||||||
|
|
@ -144,7 +141,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - searchResults shows Results when rooms available`() = runTest {
|
fun `present - searchResults shows Results when rooms available`() = runTest {
|
||||||
val roomListService = FakeRoomListService()
|
val roomListService = FakeRoomListService()
|
||||||
val presenter = createPresenter(roomListService = roomListService)
|
val presenter = createAddRoomToSpacePresenter(roomListService = roomListService)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
awaitItem() // Initial state
|
awaitItem() // Initial state
|
||||||
// Post rooms to the service
|
// Post rooms to the service
|
||||||
|
|
@ -167,7 +164,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `present - searchResults shows NoResultsFound when search active with query but no results`() = runTest {
|
fun `present - searchResults shows NoResultsFound when search active with query but no results`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
state.eventSink(AddRoomToSpaceEvent.OnSearchActiveChanged(true))
|
state.eventSink(AddRoomToSpaceEvent.OnSearchActiveChanged(true))
|
||||||
|
|
@ -189,7 +186,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
val spaceService = FakeSpaceService(
|
val spaceService = FakeSpaceService(
|
||||||
addChildToSpaceResult = addChildToSpaceResult,
|
addChildToSpaceResult = addChildToSpaceResult,
|
||||||
)
|
)
|
||||||
val presenter = createPresenter(spaceService = spaceService)
|
val presenter = createAddRoomToSpacePresenter(spaceService = spaceService)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
// Select two rooms
|
// Select two rooms
|
||||||
|
|
@ -215,7 +212,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
val spaceService = FakeSpaceService(
|
val spaceService = FakeSpaceService(
|
||||||
addChildToSpaceResult = { _, _ -> Result.success(Unit) },
|
addChildToSpaceResult = { _, _ -> Result.success(Unit) },
|
||||||
)
|
)
|
||||||
val presenter = createPresenter(spaceService = spaceService)
|
val presenter = createAddRoomToSpacePresenter(spaceService = spaceService)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
val room = aSelectRoomInfoList().first()
|
val room = aSelectRoomInfoList().first()
|
||||||
|
|
@ -237,7 +234,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
val spaceService = FakeSpaceService(
|
val spaceService = FakeSpaceService(
|
||||||
addChildToSpaceResult = { _, _ -> Result.failure(AN_EXCEPTION) },
|
addChildToSpaceResult = { _, _ -> Result.failure(AN_EXCEPTION) },
|
||||||
)
|
)
|
||||||
val presenter = createPresenter(spaceService = spaceService)
|
val presenter = createAddRoomToSpacePresenter(spaceService = spaceService)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
val room = aSelectRoomInfoList().first()
|
val room = aSelectRoomInfoList().first()
|
||||||
|
|
@ -259,7 +256,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
val spaceService = FakeSpaceService(
|
val spaceService = FakeSpaceService(
|
||||||
addChildToSpaceResult = { _, _ -> Result.success(Unit) },
|
addChildToSpaceResult = { _, _ -> Result.success(Unit) },
|
||||||
)
|
)
|
||||||
val presenter = createPresenter(spaceService = spaceService)
|
val presenter = createAddRoomToSpacePresenter(spaceService = spaceService)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
val room = aSelectRoomInfoList().first()
|
val room = aSelectRoomInfoList().first()
|
||||||
|
|
@ -279,7 +276,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `canSave is false when no rooms selected`() = runTest {
|
fun `canSave is false when no rooms selected`() = runTest {
|
||||||
val presenter = createPresenter()
|
val presenter = createAddRoomToSpacePresenter()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
assertThat(state.selectedRooms).isEmpty()
|
assertThat(state.selectedRooms).isEmpty()
|
||||||
|
|
@ -292,7 +289,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
val spaceService = FakeSpaceService(
|
val spaceService = FakeSpaceService(
|
||||||
addChildToSpaceResult = { _, _ -> Result.success(Unit) },
|
addChildToSpaceResult = { _, _ -> Result.success(Unit) },
|
||||||
)
|
)
|
||||||
val presenter = createPresenter(spaceService = spaceService)
|
val presenter = createAddRoomToSpacePresenter(spaceService = spaceService)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val state = awaitItem()
|
val state = awaitItem()
|
||||||
val room = aSelectRoomInfoList().first()
|
val room = aSelectRoomInfoList().first()
|
||||||
|
|
@ -306,7 +303,7 @@ class AddRoomToSpacePresenterTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TestScope.createPresenter(
|
private fun TestScope.createAddRoomToSpacePresenter(
|
||||||
spaceRoomList: FakeSpaceRoomList = FakeSpaceRoomList(
|
spaceRoomList: FakeSpaceRoomList = FakeSpaceRoomList(
|
||||||
paginateResult = { Result.success(Unit) },
|
paginateResult = { Result.success(Unit) },
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -43,4 +43,3 @@ fun RoomInfo.toSelectRoomInfo() = SelectRoomInfo(
|
||||||
canonicalAlias = canonicalAlias,
|
canonicalAlias = canonicalAlias,
|
||||||
isTombstoned = successorRoom != null,
|
isTombstoned = successorRoom != null,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue