diff --git a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectMultipleUsersPresenter.kt b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectMultipleUsersPresenter.kt index 9cc948d62f..f2d6be0124 100644 --- a/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectMultipleUsersPresenter.kt +++ b/features/selectusers/impl/src/main/kotlin/io/element/android/features/selectusers/impl/DefaultSelectMultipleUsersPresenter.kt @@ -23,7 +23,6 @@ import io.element.android.libraries.di.SessionScope import javax.inject.Inject import javax.inject.Named -// TODO add unit tests @ContributesBinding( scope = SessionScope::class, boundType = SelectUsersPresenter::class diff --git a/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectSingleUserPresenterTests.kt b/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt similarity index 54% rename from features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectSingleUserPresenterTests.kt rename to features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt index 61c4a386ec..36db35d61d 100644 --- a/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectSingleUserPresenterTests.kt +++ b/features/selectusers/impl/src/test/kotlin/io/element/android/features/selectusers/impl/DefaultSelectUsersPresenterTests.kt @@ -22,6 +22,7 @@ import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.features.selectusers.api.SelectUsersEvents import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.ui.components.aMatrixUser import io.element.android.libraries.matrix.ui.model.MatrixUser import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest @@ -31,19 +32,38 @@ import org.junit.Test class DefaultSelectSingleUserPresenterTests { @Test - fun `present - initial state`() = runTest { - val presenter = DefaultSelectSingleUserPresenter() + fun `present - initial state for single selection`() = runTest { + val presenter = DefaultSelectUsersPresenter(isMultiSelectionEnabled = false) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { val initialState = awaitItem() - assertThat(initialState) + assertThat(initialState.searchQuery).isEmpty() + assertThat(initialState.isMultiSelectionEnabled).isFalse() + assertThat(initialState.isSearchActive).isFalse() + assertThat(initialState.selectedUsers).isEmpty() + assertThat(initialState.searchResults).isEmpty() + } + } + + @Test + fun `present - initial state for multiple selection`() = runTest { + val presenter = DefaultSelectUsersPresenter(isMultiSelectionEnabled = true) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + assertThat(initialState.searchQuery).isEmpty() + assertThat(initialState.isMultiSelectionEnabled).isTrue() + assertThat(initialState.isSearchActive).isFalse() + assertThat(initialState.selectedUsers).isEmpty() + assertThat(initialState.searchResults).isEmpty() } } @Test fun `present - update search query`() = runTest { - val presenter = DefaultSelectSingleUserPresenter() + val presenter = DefaultSelectUsersPresenter(isMultiSelectionEnabled = false) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -66,4 +86,24 @@ class DefaultSelectSingleUserPresenterTests { assertThat(awaitItem().isSearchActive).isFalse() } } + + @Test + fun `present - select a user`() = runTest { + val presenter = DefaultSelectUsersPresenter(isMultiSelectionEnabled = false) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + + val matrixUser = aMatrixUser() + initialState.eventSink(SelectUsersEvents.AddToSelection(matrixUser)) + val selectionAfterAdd = awaitItem().selectedUsers + assertThat(selectionAfterAdd).hasSize(1) + assertThat(selectionAfterAdd).contains(matrixUser) + + initialState.eventSink(SelectUsersEvents.RemoveFromSelection(matrixUser)) + val selectionAfterRemove = awaitItem().selectedUsers + assertThat(selectionAfterRemove).isEmpty() + } + } }