From b52fa965d873b1dbe82d1a060f114115fa9ca552 Mon Sep 17 00:00:00 2001 From: Shayan Date: Mon, 2 Sep 2024 19:45:15 +0330 Subject: [PATCH] change collectJob to backgroundScope --- .../bookmarks/BookmarksViewModelTest.kt | 7 +- .../feature/foryou/ForYouViewModelTest.kt | 74 +++++++------------ .../interests/InterestsViewModelTest.kt | 12 +-- .../feature/search/SearchViewModelTest.kt | 20 ++--- .../feature/settings/SettingsViewModelTest.kt | 5 +- .../feature/topic/TopicViewModelTest.kt | 18 ++--- 6 files changed, 44 insertions(+), 92 deletions(-) diff --git a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index 037e9db64..c3ae226c0 100644 --- a/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -64,7 +64,7 @@ class BookmarksViewModelTest { @Test fun oneBookmark_showsInFeed() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } newsRepository.sendNewsResources(newsResourcesTestData) userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true) @@ -72,12 +72,11 @@ class BookmarksViewModelTest { assertIs(item) assertEquals(item.feed.size, 1) - collectJob.cancel() } @Test fun oneBookmark_whenRemoving_removesFromFeed() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } // Set the news resources to be used by this test newsRepository.sendNewsResources(newsResourcesTestData) // Start with the resource saved @@ -89,6 +88,6 @@ class BookmarksViewModelTest { assertIs(item) assertEquals(item.feed.size, 0) - collectJob.cancel() + } } diff --git a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index 2fbdf0a79..463365337 100644 --- a/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -98,9 +98,8 @@ class ForYouViewModelTest { @Test fun stateIsLoadingWhenFollowedTopicsAreLoading() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) @@ -110,30 +109,27 @@ class ForYouViewModelTest { ) assertEquals(NewsFeedUiState.Loading, viewModel.feedState.value) - collectJob1.cancel() - collectJob2.cancel() } @Test fun stateIsLoadingWhenAppIsSyncingWithNoInterests() = runTest { syncManager.setSyncing(true) - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.isSyncing.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.isSyncing.collect() } assertEquals( true, viewModel.isSyncing.value, ) - collectJob.cancel() } @Test fun onboardingStateIsLoadingWhenTopicsAreLoading() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } userDataRepository.setFollowedTopicIds(emptySet()) @@ -143,15 +139,13 @@ class ForYouViewModelTest { ) assertEquals(NewsFeedUiState.Success(emptyList()), viewModel.feedState.value) - collectJob1.cancel() - collectJob2.cancel() } @Test fun onboardingIsShownWhenNewsResourcesAreLoading() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -203,15 +197,13 @@ class ForYouViewModelTest { viewModel.feedState.value, ) - collectJob1.cancel() - collectJob2.cancel() } @Test fun onboardingIsShownAfterLoadingEmptyFollowedTopics() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -264,15 +256,13 @@ class ForYouViewModelTest { viewModel.feedState.value, ) - collectJob1.cancel() - collectJob2.cancel() } @Test fun onboardingIsNotShownAfterUserDismissesOnboarding() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) @@ -300,15 +290,13 @@ class ForYouViewModelTest { viewModel.feedState.value, ) - collectJob1.cancel() - collectJob2.cancel() } @Test fun topicSelectionUpdatesAfterSelectingTopic() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -353,15 +341,12 @@ class ForYouViewModelTest { viewModel.feedState.value, ) - collectJob1.cancel() - collectJob2.cancel() } @Test fun topicSelectionUpdatesAfterUnselectingTopic() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -416,16 +401,13 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun newsResourceSelectionUpdatesAfterLoadingFollowedTopics() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope + launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } val followedTopicIds = setOf("1") val userData = emptyUserData.copy( @@ -460,15 +442,11 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun deepLinkedNewsResourceIsFetchedAndResetAfterViewing() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.deepLinkedNewsResource.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.deepLinkedNewsResource.collect() } newsRepository.sendNewsResources(sampleNewsResources) userDataRepository.setUserData(emptyUserData) @@ -503,8 +481,6 @@ class ForYouViewModelTest { ), ), ) - - collectJob.cancel() } @Test diff --git a/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt index 63d3c49b7..1b46ef122 100644 --- a/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt +++ b/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt @@ -68,17 +68,15 @@ class InterestsViewModelTest { @Test fun uiState_whenFollowedTopicsAreLoading_thenShowLoading() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } userDataRepository.setFollowedTopicIds(emptySet()) assertEquals(InterestsUiState.Loading, viewModel.uiState.value) - - collectJob.cancel() } @Test fun uiState_whenFollowingNewTopic_thenShowUpdatedTopics() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } val toggleTopicId = testOutputTopics[1].topic.id topicsRepository.sendTopics(testInputTopics.map { it.topic }) @@ -102,13 +100,11 @@ class InterestsViewModelTest { ), viewModel.uiState.value, ) - - collectJob.cancel() } @Test fun uiState_whenUnfollowingTopics_thenShowUpdatedTopics() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } val toggleTopicId = testOutputTopics[1].topic.id @@ -135,8 +131,6 @@ class InterestsViewModelTest { ), viewModel.uiState.value, ) - - collectJob.cancel() } } diff --git a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt index c832401de..8194189a8 100644 --- a/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt @@ -85,20 +85,16 @@ class SearchViewModelTest { fun stateIsEmptyQuery_withEmptySearchQuery() = runTest { searchContentsRepository.addNewsResources(newsResourcesTestData) searchContentsRepository.addTopics(topicsTestData) - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("") assertEquals(EmptyQuery, viewModel.searchResultUiState.value) - - collectJob.cancel() } @Test fun emptyResultIsReturned_withNotMatchingQuery() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("XXX") searchContentsRepository.addNewsResources(newsResourcesTestData) @@ -106,32 +102,28 @@ class SearchViewModelTest { val result = viewModel.searchResultUiState.value assertIs(result) - - collectJob.cancel() } @Test fun recentSearches_verifyUiStateIsSuccess() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.recentSearchQueriesUiState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.recentSearchQueriesUiState.collect() } viewModel.onSearchTriggered("kotlin") val result = viewModel.recentSearchQueriesUiState.value assertIs(result) - collectJob.cancel() } @Test fun searchNotReady_withNoFtsTableEntity() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("") assertEquals(SearchNotReady, viewModel.searchResultUiState.value) - collectJob.cancel() } @Test diff --git a/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt b/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt index 9062abee6..6911acfc2 100644 --- a/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt +++ b/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt @@ -52,8 +52,8 @@ class SettingsViewModelTest { @Test fun stateIsSuccessAfterUserDataLoaded() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.settingsUiState.collect() } + + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.settingsUiState.collect() } userDataRepository.setThemeBrand(ANDROID) userDataRepository.setDarkThemeConfig(DARK) @@ -69,6 +69,5 @@ class SettingsViewModelTest { viewModel.settingsUiState.value, ) - collectJob.cancel() } } diff --git a/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt index 565732f59..e58db49ea 100644 --- a/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt @@ -73,7 +73,7 @@ class TopicViewModelTest { @Test fun uiStateTopic_whenSuccess_matchesTopicFromRepository() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } topicsRepository.sendTopics(testInputTopics.map(FollowableTopic::topic)) userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) @@ -85,8 +85,6 @@ class TopicViewModelTest { ).first() assertEquals(topicFromRepository, item.followableTopic.topic) - - collectJob.cancel() } @Test @@ -101,18 +99,16 @@ class TopicViewModelTest { @Test fun uiStateTopic_whenFollowedIdsSuccessAndTopicLoading_thenShowLoading() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) assertEquals(TopicUiState.Loading, viewModel.topicUiState.value) - - collectJob.cancel() } @Test fun uiStateTopic_whenFollowedIdsSuccessAndTopicSuccess_thenTopicSuccessAndNewsLoading() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } topicsRepository.sendTopics(testInputTopics.map { it.topic }) userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) @@ -122,13 +118,12 @@ class TopicViewModelTest { assertIs(topicUiState) assertIs(newsUiState) - collectJob.cancel() } @Test fun uiStateTopic_whenFollowedIdsSuccessAndTopicSuccessAndNewsIsSuccess_thenAllSuccess() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { + backgroundScope.launch(UnconfinedTestDispatcher()) { combine( viewModel.topicUiState, viewModel.newsUiState, @@ -143,13 +138,11 @@ class TopicViewModelTest { assertIs(topicUiState) assertIs(newsUiState) - - collectJob.cancel() } @Test fun uiStateTopic_whenFollowingTopic_thenShowUpdatedTopic() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } topicsRepository.sendTopics(testInputTopics.map { it.topic }) // Set which topic IDs are followed, not including 0. @@ -162,7 +155,6 @@ class TopicViewModelTest { viewModel.topicUiState.value, ) - collectJob.cancel() } }