From ddcde735fed1085834ead57f263648c4f822eb7a Mon Sep 17 00:00:00 2001 From: Maxime NATUREL <46314705+mnaturel@users.noreply.github.com> Date: Thu, 16 Mar 2023 15:22:04 +0100 Subject: [PATCH] Present the last added user first --- .../impl/DefaultSelectUsersPresenter.kt | 2 +- .../impl/DefaultSelectUsersPresenterTests.kt | 30 ++++++++++++++----- .../ui/components/MatrixUserProvider.kt | 6 ++-- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt index ac036fb1c0..f1c8978402 100644 --- a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt +++ b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenter.kt @@ -75,7 +75,7 @@ class DefaultSelectUsersPresenter(private val isMultiSelectionEnabled: Boolean) return SelectUsersState( searchQuery = searchQuery, searchResults = searchResults.value, - selectedUsers = selectedUsers.value, + selectedUsers = selectedUsers.value.reversed().toImmutableSet(), isSearchActive = isSearchActive, isMultiSelectionEnabled = isMultiSelectionEnabled, eventSink = ::handleEvents, diff --git a/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt b/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt index 36db35d61d..a00c7bd775 100644 --- a/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt +++ b/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt @@ -95,15 +95,29 @@ class DefaultSelectSingleUserPresenterTests { }.test { val initialState = awaitItem() - val matrixUser = aMatrixUser() - initialState.eventSink(SelectUsersEvents.AddToSelection(matrixUser)) - val selectionAfterAdd = awaitItem().selectedUsers - assertThat(selectionAfterAdd).hasSize(1) - assertThat(selectionAfterAdd).contains(matrixUser) + val userA = aMatrixUser("userA", "A") + val userB = aMatrixUser("userB", "B") + initialState.eventSink(SelectUsersEvents.AddToSelection(userA)) + val selectionAfterAddingA = awaitItem().selectedUsers + assertThat(selectionAfterAddingA).hasSize(1) + assertThat(selectionAfterAddingA).contains(userA) - initialState.eventSink(SelectUsersEvents.RemoveFromSelection(matrixUser)) - val selectionAfterRemove = awaitItem().selectedUsers - assertThat(selectionAfterRemove).isEmpty() + initialState.eventSink(SelectUsersEvents.AddToSelection(userB)) + val selectionAfterAddingB = awaitItem().selectedUsers + assertThat(selectionAfterAddingB).hasSize(2) + assertThat(selectionAfterAddingB).contains(userA) + assertThat(selectionAfterAddingB).contains(userB) + // the last added user should be presented first + assertThat(selectionAfterAddingB.first()).isEqualTo(userB) + + initialState.eventSink(SelectUsersEvents.RemoveFromSelection(userB)) + val selectionAfterRemovingB = awaitItem().selectedUsers + assertThat(selectionAfterRemovingB).hasSize(1) + assertThat(selectionAfterRemovingB).contains(userA) + + initialState.eventSink(SelectUsersEvents.RemoveFromSelection(userA)) + val selectionAfterRemovingA = awaitItem().selectedUsers + assertThat(selectionAfterRemovingA).isEmpty() } } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt index b19424c28b..b95b93d348 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt @@ -32,9 +32,9 @@ open class MatrixUserProvider : PreviewParameterProvider { ) } -fun aMatrixUser() = MatrixUser( - id = UserId("@id_of_alice:server.org"), - username = "Alice", +fun aMatrixUser(id: String = "@id_of_alice:server.org", userName: String = "Alice") = MatrixUser( + id = UserId(id), + username = userName, avatarData = anAvatarData() )