Refactor tests to remove usage of 'setUserData' in 'TestUserDataRepository'

pull/1320/head
yongsuk44 2 years ago
parent 8d008fba53
commit f7c1490ee2

@ -17,13 +17,11 @@
package com.google.samples.apps.nowinandroid.core.data
import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository
import com.google.samples.apps.nowinandroid.core.data.repository.NewsResourceQuery
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
import com.google.samples.apps.nowinandroid.core.model.data.Topic
import com.google.samples.apps.nowinandroid.core.model.data.mapToUserNewsResources
import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import kotlinx.datetime.Instant
@ -42,23 +40,16 @@ class CompositeUserNewsResourceRepositoryTest {
@Test
fun whenNoFilters_allNewsResourcesAreReturned() = runTest {
// Obtain the user news resources flow.
// Obtain the user news resources flow without any filters applied.
val userNewsResources = userNewsResourceRepository.observeAll()
// Send some news resources and user data into the data repositories.
// Send test data into the repositories.
newsRepository.sendNewsResources(sampleNewsResources)
userDataRepository.setFollowedTopicIds(emptySet())
// Construct the test user data with bookmarks and followed topics.
val userData = emptyUserData.copy(
bookmarkedNewsResources = setOf(sampleNewsResources[0].id, sampleNewsResources[2].id),
followedTopics = setOf(sampleTopic1.id),
)
userDataRepository.setUserData(userData)
// Check that the correct news resources are returned with their bookmarked state.
// Check that the correct list of news resources is returned.
assertEquals(
sampleNewsResources.mapToUserNewsResources(userData),
sampleNewsResources.mapToUserNewsResources(userDataRepository.userData.first()),
userNewsResources.first(),
)
}
@ -66,46 +57,35 @@ class CompositeUserNewsResourceRepositoryTest {
@Test
fun whenFilteredByTopicId_matchingNewsResourcesAreReturned() = runTest {
// Obtain a stream of user news resources for the given topic id.
val userNewsResources =
userNewsResourceRepository.observeAll(
NewsResourceQuery(
filterTopicIds = setOf(
sampleTopic1.id,
),
),
)
val userNewsResources = userNewsResourceRepository.observeAllForFollowedTopics()
// Send test data into the repositories.
newsRepository.sendNewsResources(sampleNewsResources)
userDataRepository.setUserData(emptyUserData)
userDataRepository.setTopicIdFollowed(sampleTopic1.id, true)
// Check that only news resources with the given topic id are returned.
assertEquals(
sampleNewsResources
.filter { sampleTopic1 in it.topics }
.mapToUserNewsResources(emptyUserData),
.mapToUserNewsResources(userDataRepository.userData.first()),
userNewsResources.first(),
)
}
@Test
fun whenFilteredByFollowedTopics_matchingNewsResourcesAreReturned() = runTest {
// Obtain a stream of user news resources for the given topic id.
val userNewsResources =
userNewsResourceRepository.observeAllForFollowedTopics()
// Obtain a stream of user news resources filtered by followed topics
val userNewsResources = userNewsResourceRepository.observeAllForFollowedTopics()
// Send test data into the repositories.
val userData = emptyUserData.copy(
followedTopics = setOf(sampleTopic1.id),
)
newsRepository.sendNewsResources(sampleNewsResources)
userDataRepository.setUserData(userData)
userDataRepository.setFollowedTopicIds(setOf(sampleTopic1.id))
// Check that only news resources with the given topic id are returned.
// Check that only news resources with the followed topics are returned.
assertEquals(
sampleNewsResources
.filter { sampleTopic1 in it.topics }
.mapToUserNewsResources(userData),
.mapToUserNewsResources(userDataRepository.userData.first()),
userNewsResources.first(),
)
}
@ -119,16 +99,14 @@ class CompositeUserNewsResourceRepositoryTest {
newsRepository.sendNewsResources(sampleNewsResources)
// Construct the test user data with bookmarks and followed topics.
val userData = emptyUserData.copy(
bookmarkedNewsResources = setOf(sampleNewsResources[0].id, sampleNewsResources[2].id),
followedTopics = setOf(sampleTopic1.id),
)
userDataRepository.setUserData(userData)
userDataRepository.setNewsResourceBookmarked(sampleNewsResources[0].id, true)
userDataRepository.setNewsResourceBookmarked(sampleNewsResources[2].id, true)
userDataRepository.setFollowedTopicIds(setOf(sampleTopic1.id))
// Check that the correct news resources are returned with their bookmarked state.
assertEquals(
listOf(sampleNewsResources[0], sampleNewsResources[2]).mapToUserNewsResources(userData),
listOf(sampleNewsResources[0], sampleNewsResources[2])
.mapToUserNewsResources(userDataRepository.userData.first()),
userNewsResources.first(),
)
}

@ -24,7 +24,6 @@ import kotlinx.coroutines.channels.BufferOverflow.DROP_OLDEST
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.filterNotNull
import org.jetbrains.annotations.TestOnly
val emptyUserData = UserData(
bookmarkedNewsResources = emptySet(),
@ -109,9 +108,4 @@ class TestUserDataRepository : UserDataRepository {
_userData.tryEmit(current.copy(shouldHideOnboarding = shouldHideOnboarding))
}
}
@TestOnly
fun setUserData(userData: UserData) {
_userData.tryEmit(userData)
}
}

@ -29,7 +29,6 @@ import com.google.samples.apps.nowinandroid.core.model.data.mapToUserNewsResourc
import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.core.testing.util.TestAnalyticsHelper
import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncManager
@ -277,8 +276,7 @@ class ForYouViewModelTest {
topicsRepository.sendTopics(sampleTopics)
val followedTopicIds = setOf("0", "1")
val userData = emptyUserData.copy(followedTopics = followedTopicIds)
userDataRepository.setUserData(userData)
userDataRepository.setFollowedTopicIds(followedTopicIds)
viewModel.dismissOnboarding()
assertEquals(
@ -295,7 +293,7 @@ class ForYouViewModelTest {
)
assertEquals(
NewsFeedUiState.Success(
feed = sampleNewsResources.mapToUserNewsResources(userData),
feed = sampleNewsResources.mapToUserNewsResources(userDataRepository.userData.first()),
),
viewModel.feedState.value,
)
@ -341,13 +339,11 @@ class ForYouViewModelTest {
viewModel.onboardingUiState.value,
)
val userData = emptyUserData.copy(followedTopics = setOf(followedTopicId))
assertEquals(
NewsFeedUiState.Success(
feed = listOf(
UserNewsResource(sampleNewsResources[1], userData),
UserNewsResource(sampleNewsResources[2], userData),
UserNewsResource(newsResource = sampleNewsResources[1], userData = userDataRepository.userData.first()),
UserNewsResource(newsResource = sampleNewsResources[2], userData = userDataRepository.userData.first()),
),
),
viewModel.feedState.value,
@ -427,14 +423,9 @@ class ForYouViewModelTest {
launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() }
val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() }
val followedTopicIds = setOf("1")
val userData = emptyUserData.copy(
followedTopics = followedTopicIds,
shouldHideOnboarding = true,
)
topicsRepository.sendTopics(sampleTopics)
userDataRepository.setUserData(userData)
userDataRepository.setFollowedTopicIds(setOf("1"))
userDataRepository.setShouldHideOnboarding(true)
newsRepository.sendNewsResources(sampleNewsResources)
val bookmarkedNewsResourceId = "2"
@ -443,10 +434,6 @@ class ForYouViewModelTest {
isChecked = true,
)
val userDataExpected = userData.copy(
bookmarkedNewsResources = setOf(bookmarkedNewsResourceId),
)
assertEquals(
OnboardingUiState.NotShown,
viewModel.onboardingUiState.value,
@ -454,8 +441,8 @@ class ForYouViewModelTest {
assertEquals(
NewsFeedUiState.Success(
feed = listOf(
UserNewsResource(newsResource = sampleNewsResources[1], userDataExpected),
UserNewsResource(newsResource = sampleNewsResources[2], userDataExpected),
UserNewsResource(newsResource = sampleNewsResources[1], userData = userDataRepository.userData.first()),
UserNewsResource(newsResource = sampleNewsResources[2], userData = userDataRepository.userData.first()),
),
),
viewModel.feedState.value,
@ -471,13 +458,13 @@ class ForYouViewModelTest {
launch(UnconfinedTestDispatcher()) { viewModel.deepLinkedNewsResource.collect() }
newsRepository.sendNewsResources(sampleNewsResources)
userDataRepository.setUserData(emptyUserData)
userDataRepository.setFollowedTopicIds(emptySet())
savedStateHandle[LINKED_NEWS_RESOURCE_ID] = sampleNewsResources.first().id
assertEquals(
expected = UserNewsResource(
newsResource = sampleNewsResources.first(),
userData = emptyUserData,
userData = userDataRepository.userData.first(),
),
actual = viewModel.deepLinkedNewsResource.value,
)

@ -26,7 +26,6 @@ import com.google.samples.apps.nowinandroid.core.testing.data.topicsTestData
import com.google.samples.apps.nowinandroid.core.testing.repository.TestRecentSearchRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestSearchContentsRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository
import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData
import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule
import com.google.samples.apps.nowinandroid.feature.search.RecentSearchQueriesUiState.Success
import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.EmptyQuery
@ -76,7 +75,6 @@ class SearchViewModelTest {
userDataRepository = userDataRepository,
analyticsHelper = NoOpAnalyticsHelper(),
)
userDataRepository.setUserData(emptyUserData)
}
@Test
@ -104,6 +102,7 @@ class SearchViewModelTest {
viewModel.onSearchQueryChanged("XXX")
searchContentsRepository.addNewsResources(newsResourcesTestData)
searchContentsRepository.addTopics(topicsTestData)
userDataRepository.setFollowedTopicIds(emptySet())
val result = viewModel.searchResultUiState.value
assertIs<SearchResultUiState.Success>(result)

Loading…
Cancel
Save