Skip to content

Commit d372d6e

Browse files
committed
improve BookmarksViewModelTest coverage
Change-Id: Ide13abd9a125a337ba9c9fff2136221e16ebd46e
1 parent 4a07234 commit d372d6e

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ import org.junit.Before
3131
import org.junit.Rule
3232
import org.junit.Test
3333
import kotlin.test.assertEquals
34+
import kotlin.test.assertFalse
3435
import kotlin.test.assertIs
36+
import kotlin.test.assertTrue
3537

3638
/**
3739
* To learn more about how this test handles Flows created with stateIn, see
@@ -86,5 +88,53 @@ class BookmarksViewModelTest {
8688
val item = viewModel.feedUiState.value
8789
assertIs<Success>(item)
8890
assertEquals(item.feed.size, 0)
91+
assertTrue(viewModel.shouldDisplayUndoBookmark)
92+
}
93+
94+
@Test
95+
fun whenResourceViewed_setResourcesViewed() = runTest {
96+
val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() }
97+
98+
// Give
99+
newsRepository.sendNewsResources(newsResourcesTestData)
100+
userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true)
101+
val itemBeforeViewed = viewModel.feedUiState.value
102+
check(itemBeforeViewed is Success)
103+
check(!itemBeforeViewed.feed.first().hasBeenViewed)
104+
105+
// When
106+
viewModel.setNewsResourceViewed(newsResourcesTestData[0].id, true)
107+
108+
// Then
109+
val item = viewModel.feedUiState.value
110+
assertIs<Success>(item)
111+
assertTrue(item.feed.first().hasBeenViewed)
112+
113+
collectJob.cancel()
114+
}
115+
116+
@Test
117+
fun whenUndoBookmarkRemoval_thenBookmarkIsRestored() = runTest {
118+
val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() }
119+
120+
// Give
121+
newsRepository.sendNewsResources(newsResourcesTestData)
122+
userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true)
123+
viewModel.removeFromSavedResources(newsResourcesTestData[0].id)
124+
check(viewModel.shouldDisplayUndoBookmark)
125+
val itemBeforeUndo = viewModel.feedUiState.value
126+
check(itemBeforeUndo is Success)
127+
check(itemBeforeUndo.feed.isEmpty())
128+
129+
// When
130+
viewModel.undoBookmarkRemoval()
131+
132+
// Then
133+
assertFalse(viewModel.shouldDisplayUndoBookmark)
134+
val item = viewModel.feedUiState.value
135+
assertIs<Success>(item)
136+
assertEquals(item.feed.size, 1)
137+
138+
collectJob.cancel()
89139
}
90140
}

0 commit comments

Comments
 (0)