Skip to content

Commit e86cdea

Browse files
committed
Add unit tests and comments
1 parent a98dd00 commit e86cdea

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCase.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ class GetFollowedUserNewsResourcesUseCase @Inject constructor(
6363
* Returns a list of UserNewsResources for topics which the user is following
6464
*/
6565
operator fun invoke(): Flow<List<UserNewsResource>> =
66-
6766
/**
6867
* This sequence of flow transformation functions does the following:
6968
*
@@ -72,9 +71,9 @@ class GetFollowedUserNewsResourcesUseCase @Inject constructor(
7271
* - distinctUntilChanged: will only emit a set of followed topic IDs if it's changed. This
7372
* avoids calling potentially expensive operations (like setting up a new flow) when nothing
7473
* has changed.
75-
* - flatMapLatest: getUserNewsResources returns a flow, so we end up with a flow inside a
76-
* flow. flatMapLatest solves this and cancels any previous flows created by
77-
* getUserNewsResources.
74+
* - flatMapLatest: getUserNewsResources returns a flow, so we have a flow inside a
75+
* flow. flatMapLatest moves the inner flow (the one we want to return) to the outer flow
76+
* and cancels any previous flows created by getUserNewsResources.
7877
*/
7978
userDataRepository.userData
8079
.map { userData ->

core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetUserNewsResourcesUseCaseTest.kt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,55 @@ class GetUserNewsResourcesUseCaseTest {
8383
}
8484
}
8585

86+
class GetFollowedUserNewsResourcesUseCaseTest {
87+
88+
@get:Rule
89+
val mainDispatcherRule = MainDispatcherRule()
90+
91+
private val newsRepository = TestNewsRepository()
92+
private val userDataRepository = TestUserDataRepository()
93+
private val getUserNewsResourcesUseCase =
94+
GetUserNewsResourcesUseCase(newsRepository, userDataRepository)
95+
96+
val useCase =
97+
GetFollowedUserNewsResourcesUseCase(userDataRepository, getUserNewsResourcesUseCase)
98+
99+
@Test
100+
fun whenOnboardingShownAndNoTopicsFollowed_emptyListIsReturned() = runTest {
101+
val followedNewsResources = useCase()
102+
103+
// Send some news resources and empty user data
104+
newsRepository.sendNewsResources(sampleNewsResources)
105+
userDataRepository.setUserData(emptyUserData)
106+
107+
// Check that an empty list is returned
108+
assertEquals(
109+
emptyList(),
110+
followedNewsResources.first(),
111+
)
112+
}
113+
114+
@Test
115+
fun whenTopicsAreFollowed_correctNewsResourcesAreReturned() = runTest {
116+
val followedNewsResources = useCase()
117+
118+
// Send some news resources and user data with a followed topic
119+
newsRepository.sendNewsResources(sampleNewsResources)
120+
121+
val userData = emptyUserData.copy(
122+
followedTopics = setOf(sampleTopic1.id),
123+
)
124+
userDataRepository.setUserData(userData)
125+
126+
assertEquals(
127+
sampleNewsResources
128+
.filter { it.topics.contains(sampleTopic1) }
129+
.mapToUserNewsResources(userData),
130+
followedNewsResources.first(),
131+
)
132+
}
133+
}
134+
86135
private val sampleTopic1 = Topic(
87136
id = "Topic1",
88137
name = "Headlines",

0 commit comments

Comments
 (0)