Skip to content

Commit 5a12582

Browse files
committed
Fix emptyResultIsReturned_withNotMatchingQuery unit test
`searchResultUiState` transitively relied on `getSearchContentsCount` updates and on `userDataRepository` to emit something.
1 parent c1d6c88 commit 5a12582

File tree

2 files changed

+24
-26
lines changed

2 files changed

+24
-26
lines changed

core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,39 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
2121
import com.google.samples.apps.nowinandroid.core.model.data.SearchResult
2222
import com.google.samples.apps.nowinandroid.core.model.data.Topic
2323
import kotlinx.coroutines.flow.Flow
24-
import kotlinx.coroutines.flow.flow
25-
import kotlinx.coroutines.flow.flowOf
24+
import kotlinx.coroutines.flow.MutableStateFlow
25+
import kotlinx.coroutines.flow.combine
26+
import kotlinx.coroutines.flow.update
2627

2728
class TestSearchContentsRepository : SearchContentsRepository {
2829

29-
private val cachedTopics: MutableList<Topic> = mutableListOf()
30-
private val cachedNewsResources: MutableList<NewsResource> = mutableListOf()
30+
private val cachedTopics = MutableStateFlow(emptyList<Topic>())
31+
private val cachedNewsResources = MutableStateFlow(emptyList<NewsResource>())
3132

3233
override suspend fun populateFtsData() = Unit
3334

34-
override fun searchContents(searchQuery: String): Flow<SearchResult> = flowOf(
35-
SearchResult(
36-
topics = cachedTopics.filter {
37-
searchQuery in it.name || searchQuery in it.shortDescription || searchQuery in it.longDescription
38-
},
39-
newsResources = cachedNewsResources.filter {
40-
searchQuery in it.content || searchQuery in it.title
41-
},
42-
),
43-
)
44-
45-
override fun getSearchContentsCount(): Flow<Int> = flow {
46-
emit(cachedTopics.size + cachedNewsResources.size)
47-
}
35+
override fun searchContents(searchQuery: String): Flow<SearchResult> =
36+
combine(cachedTopics, cachedNewsResources) { topics, news ->
37+
SearchResult(
38+
topics = topics.filter {
39+
searchQuery in it.name || searchQuery in it.shortDescription || searchQuery in it.longDescription
40+
},
41+
newsResources = news.filter {
42+
searchQuery in it.content || searchQuery in it.title
43+
},
44+
)
45+
}
46+
47+
override fun getSearchContentsCount(): Flow<Int> = combine(cachedTopics, cachedNewsResources) { topics, news -> topics.size + news.size }
4848

4949
/**
5050
* Test only method to add the topics to the stored list in memory
5151
*/
52-
fun addTopics(topics: List<Topic>) {
53-
cachedTopics.addAll(topics)
54-
}
52+
fun addTopics(topics: List<Topic>) = cachedTopics.update { it + topics }
5553

5654
/**
5755
* Test only method to add the news resources to the stored list in memory
5856
*/
59-
fun addNewsResources(newsResources: List<NewsResource>) {
60-
cachedNewsResources.addAll(newsResources)
61-
}
57+
fun addNewsResources(newsResources: List<NewsResource>) =
58+
cachedNewsResources.update { newsResources }
6259
}

feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import com.google.samples.apps.nowinandroid.core.testing.data.topicsTestData
2626
import com.google.samples.apps.nowinandroid.core.testing.repository.TestRecentSearchRepository
2727
import com.google.samples.apps.nowinandroid.core.testing.repository.TestSearchContentsRepository
2828
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
29+
import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData
2930
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
3031
import com.google.samples.apps.nowinandroid.feature.search.RecentSearchQueriesUiState.Success
3132
import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.EmptyQuery
@@ -71,6 +72,7 @@ class SearchViewModelTest {
7172
recentSearchRepository = recentSearchRepository,
7273
analyticsHelper = NoOpAnalyticsHelper(),
7374
)
75+
userDataRepository.setUserData(emptyUserData)
7476
}
7577

7678
@Test
@@ -100,8 +102,7 @@ class SearchViewModelTest {
100102
searchContentsRepository.addTopics(topicsTestData)
101103

102104
val result = viewModel.searchResultUiState.value
103-
// TODO: Figure out to get the latest emitted ui State? The result is emitted as EmptyQuery
104-
// assertIs<Success>(result)
105+
assertIs<SearchResultUiState.Success>(result)
105106

106107
collectJob.cancel()
107108
}

0 commit comments

Comments
 (0)