diff --git a/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt index 27f328240..f800eee29 100644 --- a/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt +++ b/feature-foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt @@ -169,6 +169,11 @@ class ForYouViewModel @Inject constructor( viewModelScope.launch { topicsRepository.setFollowedTopicIds(inProgressTopicSelection) + + // Clear out the in-progress selection after saving it + withMutableSnapshot { + inProgressTopicSelection = emptySet() + } } } } diff --git a/feature-foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature-foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index 1ed4ce9b4..09bd402c0 100644 --- a/feature-foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature-foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -328,6 +328,69 @@ class ForYouViewModelTest { } } + @Test + fun topicSelectionIsResetAfterSavingTopicsAndRemovingThem() = runTest { + viewModel.uiState + .test { + awaitItem() + topicsRepository.sendTopics(sampleTopics) + topicsRepository.setFollowedTopicIds(emptySet()) + newsRepository.sendNewsResources(sampleNewsResources) + + awaitItem() + viewModel.updateTopicSelection(1, isChecked = true) + + awaitItem() + viewModel.saveFollowedTopics() + + awaitItem() + topicsRepository.setFollowedTopicIds(emptySet()) + + assertEquals( + ForYouFeedUiState.PopulatedFeed.FeedWithTopicSelection( + topics = listOf( + FollowableTopic( + topic = Topic( + id = 0, + name = "Headlines", + shortDescription = "", + longDescription = "long description", + url = "URL", + imageUrl = "image URL", + ), + isFollowed = false + ), + FollowableTopic( + topic = Topic( + id = 1, + name = "UI", + shortDescription = "", + longDescription = "long description", + url = "URL", + imageUrl = "image URL", + ), + isFollowed = false + ), + FollowableTopic( + topic = Topic( + id = 2, + name = "Tools", + shortDescription = "", + longDescription = "long description", + url = "URL", + imageUrl = "image URL", + ), + isFollowed = false + ) + ), + feed = emptyList() + ), + awaitItem() + ) + cancel() + } + } + @Test fun newsResourceSelectionUpdatesAfterLoadingFollowedTopics() = runTest { viewModel.uiState