MatrixUserRepo : fix tests
This commit is contained in:
@@ -24,6 +24,7 @@ import io.element.android.libraries.designsystem.theme.components.SearchBarResul
|
||||
import io.element.android.libraries.matrix.ui.components.aMatrixUser
|
||||
import io.element.android.libraries.matrix.ui.components.aMatrixUserList
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResult
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResults
|
||||
import io.element.android.libraries.usersearch.test.FakeUserRepository
|
||||
import io.element.android.tests.testutils.WarmUpRule
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
@@ -136,20 +137,33 @@ class DefaultUserListPresenterTests {
|
||||
skipItems(2)
|
||||
|
||||
// When the user repository emits a result, it's copied to the state
|
||||
userRepository.emitResult(listOf(UserSearchResult(aMatrixUser())))
|
||||
assertThat(awaitItem().searchResults).isEqualTo(
|
||||
SearchBarResultState.Results(
|
||||
persistentListOf(UserSearchResult(aMatrixUser()))
|
||||
)
|
||||
val result = UserSearchResults(
|
||||
results = listOf(UserSearchResult(aMatrixUser())),
|
||||
isFetchingSearchResults = false,
|
||||
)
|
||||
|
||||
userRepository.emitResult(result)
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.searchResults).isEqualTo(
|
||||
SearchBarResultState.Results(
|
||||
persistentListOf(UserSearchResult(aMatrixUser()))
|
||||
)
|
||||
)
|
||||
assertThat(state.isFetchingSearchResults).isFalse()
|
||||
}
|
||||
// When the user repository emits another result, it replaces the previous value
|
||||
userRepository.emitResult(aMatrixUserList().map { UserSearchResult(it) })
|
||||
assertThat(awaitItem().searchResults).isEqualTo(
|
||||
SearchBarResultState.Results(
|
||||
aMatrixUserList().map { UserSearchResult(it) }
|
||||
)
|
||||
val newResult = UserSearchResults(
|
||||
results = aMatrixUserList().map { UserSearchResult(it) },
|
||||
isFetchingSearchResults = false,
|
||||
)
|
||||
userRepository.emitResult(newResult)
|
||||
awaitItem().also { state ->
|
||||
assertThat(state.searchResults).isEqualTo(
|
||||
SearchBarResultState.Results(
|
||||
aMatrixUserList().map { UserSearchResult(it) }
|
||||
)
|
||||
)
|
||||
assertThat(state.isFetchingSearchResults).isFalse()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,7 +189,7 @@ class DefaultUserListPresenterTests {
|
||||
skipItems(2)
|
||||
|
||||
// When the results list is empty, the state is set to NoResults
|
||||
userRepository.emitResult(emptyList())
|
||||
userRepository.emitResult(UserSearchResults(results = emptyList(), isFetchingSearchResults = false))
|
||||
assertThat(awaitItem().searchResults).isInstanceOf(SearchBarResultState.NoResultsFound::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import io.element.android.libraries.matrix.test.room.FakeMatrixRoom
|
||||
import io.element.android.libraries.matrix.ui.components.aMatrixUser
|
||||
import io.element.android.libraries.matrix.ui.components.aMatrixUserList
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResult
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResults
|
||||
import io.element.android.libraries.usersearch.test.FakeUserRepository
|
||||
import io.element.android.tests.testutils.WarmUpRule
|
||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||
@@ -111,7 +112,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||
repository.emitResult(emptyList())
|
||||
repository.emitResult(UserSearchResults(results = emptyList()))
|
||||
skipItems(1)
|
||||
|
||||
val resultState = awaitItem()
|
||||
@@ -137,7 +138,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||
repository.emitResult(aMatrixUserList().map { UserSearchResult(it) })
|
||||
repository.emitResult(UserSearchResults(results =aMatrixUserList().map { UserSearchResult(it) }))
|
||||
skipItems(1)
|
||||
|
||||
val resultState = awaitItem()
|
||||
@@ -189,7 +190,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||
repository.emitResult(aMatrixUserList().map { UserSearchResult(it) })
|
||||
repository.emitResult(UserSearchResults(results =aMatrixUserList().map { UserSearchResult(it) }))
|
||||
skipItems(1)
|
||||
|
||||
val resultState = awaitItem()
|
||||
@@ -250,7 +251,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||
|
||||
val unresolvedUser = UserSearchResult(aMatrixUser(id = A_USER_ID.value), isUnresolved = true)
|
||||
repository.emitResult(listOf(unresolvedUser) + aMatrixUserList().map { UserSearchResult(it) })
|
||||
repository.emitResult(UserSearchResults(results = listOf(unresolvedUser) + aMatrixUserList().map { UserSearchResult(it) }))
|
||||
skipItems(1)
|
||||
|
||||
val resultState = awaitItem()
|
||||
@@ -318,7 +319,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||
repository.emitResult((aMatrixUserList() + selectedUser).map { UserSearchResult(it) })
|
||||
repository.emitResult(UserSearchResults(results = (aMatrixUserList() + selectedUser).map { UserSearchResult(it) }))
|
||||
skipItems(2)
|
||||
|
||||
val resultState = awaitItem()
|
||||
@@ -358,7 +359,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||
skipItems(1)
|
||||
|
||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||
repository.emitResult((aMatrixUserList() + selectedUser).map { UserSearchResult(it) })
|
||||
repository.emitResult(UserSearchResults(results =(aMatrixUserList() + selectedUser).map { UserSearchResult(it) }))
|
||||
skipItems(2)
|
||||
|
||||
// And then a user is toggled
|
||||
|
||||
@@ -20,5 +20,5 @@ import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface UserRepository {
|
||||
|
||||
fun search(query: String): Flow<UserSearchResultsState>
|
||||
fun search(query: String): Flow<UserSearchResults>
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ data class UserSearchResult(
|
||||
val isUnresolved: Boolean = false,
|
||||
)
|
||||
|
||||
data class UserSearchResultsState(
|
||||
data class UserSearchResults(
|
||||
val results: List<UserSearchResult>,
|
||||
val isFetchingSearchResults: Boolean
|
||||
val isFetchingSearchResults: Boolean = false,
|
||||
)
|
||||
|
||||
@@ -25,7 +25,7 @@ import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
import io.element.android.libraries.usersearch.api.UserListDataSource
|
||||
import io.element.android.libraries.usersearch.api.UserRepository
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResult
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResultsState
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResults
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flow
|
||||
@@ -37,7 +37,7 @@ class MatrixUserRepository @Inject constructor(
|
||||
private val dataSource: UserListDataSource
|
||||
) : UserRepository {
|
||||
|
||||
override fun search(query: String): Flow<UserSearchResultsState> = flow {
|
||||
override fun search(query: String): Flow<UserSearchResults> = flow {
|
||||
val shouldQueryProfile = MatrixPatterns.isUserId(query) && !client.isMe(UserId(query))
|
||||
val shouldFetchSearchResults = query.length >= MINIMUM_SEARCH_LENGTH
|
||||
// If the search term is a MXID that's not ours, we'll show a 'fake' result for that user, then update it when we get search results.
|
||||
@@ -47,7 +47,7 @@ class MatrixUserRepository @Inject constructor(
|
||||
null
|
||||
}
|
||||
if (shouldQueryProfile || shouldFetchSearchResults) {
|
||||
emit(UserSearchResultsState(isFetchingSearchResults = shouldFetchSearchResults, results = listOfNotNull(fakeSearchResult)))
|
||||
emit(UserSearchResults(isFetchingSearchResults = shouldFetchSearchResults, results = listOfNotNull(fakeSearchResult)))
|
||||
}
|
||||
if (shouldFetchSearchResults) {
|
||||
val results = fetchSearchResults(query, shouldQueryProfile)
|
||||
@@ -55,7 +55,7 @@ class MatrixUserRepository @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchSearchResults(query: String, shouldQueryProfile: Boolean): UserSearchResultsState {
|
||||
private suspend fun fetchSearchResults(query: String, shouldQueryProfile: Boolean): UserSearchResults {
|
||||
// Debounce
|
||||
delay(DEBOUNCE_TIME_MILLIS)
|
||||
val results = dataSource
|
||||
@@ -73,7 +73,7 @@ class MatrixUserRepository @Inject constructor(
|
||||
?: UserSearchResult(MatrixUser(UserId(query)), isUnresolved = true))
|
||||
}
|
||||
|
||||
return UserSearchResultsState(results = results, isFetchingSearchResults = false)
|
||||
return UserSearchResults(results = results, isFetchingSearchResults = false)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
package io.element.android.libraries.usersearch.test
|
||||
|
||||
import io.element.android.libraries.usersearch.api.UserRepository
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResult
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResults
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
|
||||
@@ -26,14 +26,14 @@ class FakeUserRepository : UserRepository {
|
||||
var providedQuery: String? = null
|
||||
private set
|
||||
|
||||
private val flow = MutableSharedFlow<List<UserSearchResult>>()
|
||||
private val flow = MutableSharedFlow<UserSearchResults>()
|
||||
|
||||
override suspend fun search(query: String): Flow<List<UserSearchResult>> {
|
||||
override fun search(query: String): Flow<UserSearchResults> {
|
||||
providedQuery = query
|
||||
return flow
|
||||
}
|
||||
|
||||
suspend fun emitResult(result: List<UserSearchResult>) {
|
||||
suspend fun emitResult(result: UserSearchResults) {
|
||||
flow.emit(result)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user