Adding unit tests for selection of users

This commit is contained in:
Maxime NATUREL 2023-03-16 15:00:08 +01:00 committed by Florian Renaud
parent bc47691733
commit 19e0116e2e
2 changed files with 44 additions and 5 deletions

View file

@ -23,7 +23,6 @@ import io.element.android.libraries.di.SessionScope
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
// TODO add unit tests
@ContributesBinding( @ContributesBinding(
scope = SessionScope::class, scope = SessionScope::class,
boundType = SelectUsersPresenter::class boundType = SelectUsersPresenter::class

View file

@ -22,6 +22,7 @@ import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import io.element.android.features.selectusers.api.SelectUsersEvents import io.element.android.features.selectusers.api.SelectUsersEvents
import io.element.android.libraries.matrix.api.core.UserId 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 io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
@ -31,19 +32,38 @@ import org.junit.Test
class DefaultSelectSingleUserPresenterTests { class DefaultSelectSingleUserPresenterTests {
@Test @Test
fun `present - initial state`() = runTest { fun `present - initial state for single selection`() = runTest {
val presenter = DefaultSelectSingleUserPresenter() val presenter = DefaultSelectUsersPresenter(isMultiSelectionEnabled = false)
moleculeFlow(RecompositionClock.Immediate) { moleculeFlow(RecompositionClock.Immediate) {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() 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 @Test
fun `present - update search query`() = runTest { fun `present - update search query`() = runTest {
val presenter = DefaultSelectSingleUserPresenter() val presenter = DefaultSelectUsersPresenter(isMultiSelectionEnabled = false)
moleculeFlow(RecompositionClock.Immediate) { moleculeFlow(RecompositionClock.Immediate) {
presenter.present() presenter.present()
}.test { }.test {
@ -66,4 +86,24 @@ class DefaultSelectSingleUserPresenterTests {
assertThat(awaitItem().isSearchActive).isFalse() 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()
}
}
} }