Skip to content

Commit b37f1bf

Browse files
author
Thomas Horta
committed
Update unit tests for ReaderTagsFeedViewModel
1 parent 6738e9b commit b37f1bf

File tree

1 file changed

+83
-7
lines changed

1 file changed

+83
-7
lines changed

WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderTagsFeedViewModelTest.kt

Lines changed: 83 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import org.junit.Test
1414
import org.mockito.Mock
1515
import org.mockito.Mockito
1616
import org.mockito.kotlin.any
17+
import org.mockito.kotlin.anyOrNull
1718
import org.mockito.kotlin.doSuspendableAnswer
19+
import org.mockito.kotlin.mock
1820
import org.mockito.kotlin.times
1921
import org.mockito.kotlin.verify
2022
import org.mockito.kotlin.verifyNoInteractions
@@ -35,12 +37,14 @@ import org.wordpress.android.ui.reader.discover.ReaderPostCardActionsHandler
3537
import org.wordpress.android.ui.reader.discover.ReaderPostMoreButtonUiStateBuilder
3638
import org.wordpress.android.ui.reader.discover.ReaderPostUiStateBuilder
3739
import org.wordpress.android.ui.reader.exceptions.ReaderPostFetchException
40+
import org.wordpress.android.ui.reader.repository.ReaderAnnouncementRepository
3841
import org.wordpress.android.ui.reader.repository.ReaderPostRepository
3942
import org.wordpress.android.ui.reader.repository.usecases.PostLikeUseCase
4043
import org.wordpress.android.ui.reader.tracker.ReaderTracker
4144
import org.wordpress.android.ui.reader.viewmodels.tagsfeed.ReaderTagsFeedUiStateMapper
4245
import org.wordpress.android.ui.reader.viewmodels.tagsfeed.ReaderTagsFeedViewModel
4346
import org.wordpress.android.ui.reader.viewmodels.tagsfeed.ReaderTagsFeedViewModel.ActionEvent
47+
import org.wordpress.android.ui.reader.views.compose.ReaderAnnouncementCardItemData
4448
import org.wordpress.android.ui.reader.views.compose.tagsfeed.TagsFeedPostItem
4549
import org.wordpress.android.util.DisplayUtilsWrapper
4650
import org.wordpress.android.util.NetworkUtilsWrapper
@@ -86,6 +90,9 @@ class ReaderTagsFeedViewModelTest : BaseUnitTest() {
8690
@Mock
8791
lateinit var networkUtilsWrapper: NetworkUtilsWrapper
8892

93+
@Mock
94+
lateinit var readerAnnouncementRepository: ReaderAnnouncementRepository
95+
8996
private lateinit var viewModel: ReaderTagsFeedViewModel
9097

9198
private val collectedUiStates: MutableList<ReaderTagsFeedViewModel.UiState> = mutableListOf()
@@ -116,6 +123,7 @@ class ReaderTagsFeedViewModelTest : BaseUnitTest() {
116123
displayUtilsWrapper = displayUtilsWrapper,
117124
readerTracker = readerTracker,
118125
networkUtilsWrapper = networkUtilsWrapper,
126+
readerAnnouncementRepository = readerAnnouncementRepository,
119127
)
120128
whenever(readerPostCardActionsHandler.navigationEvents)
121129
.thenReturn(navigationEvents)
@@ -126,6 +134,69 @@ class ReaderTagsFeedViewModelTest : BaseUnitTest() {
126134
observeErrorMessageEvents()
127135
}
128136

137+
@Test
138+
fun `when tags changed, then UI state should update properly`() = testCollectingUiStates {
139+
// Given
140+
val tag = ReaderTestUtils.createTag("tag")
141+
mockMapInitialTagFeedItems()
142+
143+
// When
144+
viewModel.onTagsChanged(listOf(tag))
145+
advanceUntilIdle()
146+
147+
// Then
148+
assertThat(collectedUiStates).contains(
149+
ReaderTagsFeedViewModel.UiState.Loaded(
150+
data = listOf(getInitialTagFeedItem(tag)),
151+
)
152+
)
153+
}
154+
155+
@Test
156+
fun `given has announcement, when tags changed, then UI state should update properly`() = testCollectingUiStates {
157+
// Given
158+
val tag = ReaderTestUtils.createTag("tag")
159+
val announcementItems = listOf<ReaderAnnouncementCardItemData>(mock(), mock())
160+
mockMapInitialTagFeedItems()
161+
whenever(readerAnnouncementRepository.hasReaderAnnouncement()).thenReturn(true)
162+
whenever(readerAnnouncementRepository.getReaderAnnouncementItems()).thenReturn(announcementItems)
163+
164+
// When
165+
viewModel.onTagsChanged(listOf(tag))
166+
advanceUntilIdle()
167+
168+
// Then
169+
val loadedState = collectedUiStates.last() as ReaderTagsFeedViewModel.UiState.Loaded
170+
assertThat(loadedState.data).isEqualTo(listOf(getInitialTagFeedItem(tag)))
171+
assertThat(loadedState.announcementItem!!.items).isEqualTo(announcementItems)
172+
}
173+
174+
@Test
175+
fun `given has announcement, when done clicked, then UI state should update properly`() = testCollectingUiStates {
176+
// Given
177+
val tag = ReaderTestUtils.createTag("tag")
178+
val announcementItems = listOf<ReaderAnnouncementCardItemData>(mock(), mock())
179+
mockMapInitialTagFeedItems()
180+
whenever(readerAnnouncementRepository.hasReaderAnnouncement()).thenReturn(true)
181+
whenever(readerAnnouncementRepository.getReaderAnnouncementItems()).thenReturn(announcementItems)
182+
183+
viewModel.onTagsChanged(listOf(tag))
184+
advanceUntilIdle()
185+
186+
// When
187+
val loadedState = collectedUiStates.last() as ReaderTagsFeedViewModel.UiState.Loaded
188+
loadedState.announcementItem!!.onDoneClicked()
189+
advanceUntilIdle()
190+
191+
// Then
192+
verify(readerAnnouncementRepository).dismissReaderAnnouncement()
193+
assertThat(collectedUiStates.last()).isEqualTo(
194+
ReaderTagsFeedViewModel.UiState.Loaded(
195+
data = listOf(getInitialTagFeedItem(tag)),
196+
)
197+
)
198+
}
199+
129200
@Test
130201
fun `given valid tag, when loaded, then UI state should update properly`() = testCollectingUiStates {
131202
// Given
@@ -899,13 +970,18 @@ class ReaderTagsFeedViewModelTest : BaseUnitTest() {
899970
}
900971

901972
private fun mockMapInitialTagFeedItems() {
902-
whenever(readerTagsFeedUiStateMapper.mapInitialPostsUiState(any(), any(), any(), any(), any(), any()))
903-
.thenAnswer {
904-
val tags = it.getArgument<List<ReaderTag>>(0)
905-
ReaderTagsFeedViewModel.UiState.Loaded(
906-
tags.map { tag -> getInitialTagFeedItem(tag) }
907-
)
908-
}
973+
whenever(
974+
readerTagsFeedUiStateMapper.mapInitialPostsUiState(
975+
any(), anyOrNull(), any(), any(), any(), any(), any()
976+
)
977+
).thenAnswer {
978+
val tags = it.getArgument<List<ReaderTag>>(0)
979+
val announcementItem = it.getArgument<ReaderTagsFeedViewModel.ReaderAnnouncementItem?>(1)
980+
ReaderTagsFeedViewModel.UiState.Loaded(
981+
data = tags.map { tag -> getInitialTagFeedItem(tag) },
982+
announcementItem = announcementItem,
983+
)
984+
}
909985
}
910986

911987
private fun mockMapLoadingTagFeedItems() {

0 commit comments

Comments
 (0)