Skip to content

Commit 1d2029a

Browse files
authored
Merge pull request #1040 from SimonMarquis/fix-unit-test
Fix `emptyResultIsReturned_withNotMatchingQuery` unit test
2 parents dba36d6 + b687328 commit 1d2029a

File tree

2 files changed

+29
-34
lines changed

2 files changed

+29
-34
lines changed

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

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,36 @@ 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
27+
import org.jetbrains.annotations.TestOnly
2628

2729
class TestSearchContentsRepository : SearchContentsRepository {
2830

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

3234
override suspend fun populateFtsData() = Unit
3335

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-
}
48-
49-
/**
50-
* Test only method to add the topics to the stored list in memory
51-
*/
52-
fun addTopics(topics: List<Topic>) {
53-
cachedTopics.addAll(topics)
54-
}
55-
56-
/**
57-
* Test only method to add the news resources to the stored list in memory
58-
*/
59-
fun addNewsResources(newsResources: List<NewsResource>) {
60-
cachedNewsResources.addAll(newsResources)
61-
}
36+
override fun searchContents(searchQuery: String): Flow<SearchResult> =
37+
combine(cachedTopics, cachedNewsResources) { topics, news ->
38+
SearchResult(
39+
topics = topics.filter {
40+
searchQuery in it.name || searchQuery in it.shortDescription || searchQuery in it.longDescription
41+
},
42+
newsResources = news.filter {
43+
searchQuery in it.content || searchQuery in it.title
44+
},
45+
)
46+
}
47+
48+
override fun getSearchContentsCount(): Flow<Int> = combine(cachedTopics, cachedNewsResources) { topics, news -> topics.size + news.size }
49+
50+
@TestOnly
51+
fun addTopics(topics: List<Topic>) = cachedTopics.update { it + topics }
52+
53+
@TestOnly
54+
fun addNewsResources(newsResources: List<NewsResource>) =
55+
cachedNewsResources.update { it + newsResources }
6256
}

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)