mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-17 11:25:34 -04:00
#2154 moved some tests to page view model tests WIP
This commit is contained in:
parent
6a83a9e123
commit
f8e7c9ab8c
@ -23,8 +23,9 @@ import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem
|
|||||||
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.BookmarkState
|
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.BookmarkState
|
||||||
import org.kiwix.kiwixmobile.core.page.history.adapter.HistoryListItem
|
import org.kiwix.kiwixmobile.core.page.history.adapter.HistoryListItem
|
||||||
import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryState
|
import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryState
|
||||||
|
import org.kiwix.kiwixmobile.core.page.viewmodel.TestablePageState
|
||||||
|
|
||||||
class PageImpl(
|
data class PageImpl(
|
||||||
override val zimFilePath: String? = "zimFilePath",
|
override val zimFilePath: String? = "zimFilePath",
|
||||||
override val url: String = "url",
|
override val url: String = "url",
|
||||||
override var isSelected: Boolean = false,
|
override var isSelected: Boolean = false,
|
||||||
@ -92,8 +93,10 @@ fun bookmark(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun bookmarkState(
|
fun bookmarkState(
|
||||||
bookmarks: List<BookmarkItem> = listOf(),
|
bookmarks: List<BookmarkItem> = emptyList(),
|
||||||
showAll: Boolean = true,
|
showAll: Boolean = true,
|
||||||
zimId: String = "id",
|
zimId: String = "id",
|
||||||
searchTerm: String = ""
|
searchTerm: String = ""
|
||||||
): BookmarkState = BookmarkState(bookmarks, showAll, zimId, searchTerm)
|
): BookmarkState = BookmarkState(bookmarks, showAll, zimId, searchTerm)
|
||||||
|
|
||||||
|
fun pageState(): TestablePageState = TestablePageState()
|
||||||
|
@ -34,18 +34,13 @@ import org.kiwix.kiwixmobile.core.page.bookmark
|
|||||||
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.ShowDeleteBookmarksDialog
|
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.ShowDeleteBookmarksDialog
|
||||||
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.UpdateAllBookmarksPreference
|
import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.UpdateAllBookmarksPreference
|
||||||
import org.kiwix.kiwixmobile.core.page.bookmarkState
|
import org.kiwix.kiwixmobile.core.page.bookmarkState
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Exit
|
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.ExitActionModeMenu
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.ExitActionModeMenu
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Filter
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Filter
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.OnItemClick
|
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.OnItemLongClick
|
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UpdatePages
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UpdatePages
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteButton
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteButton
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteSelectedPages
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteSelectedPages
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedShowAllToggle
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedShowAllToggle
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.effects.OpenPage
|
|
||||||
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
||||||
import org.kiwix.kiwixmobile.core.search.viewmodel.effects.Finish
|
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
import org.kiwix.sharedFunctions.InstantExecutorExtension
|
import org.kiwix.sharedFunctions.InstantExecutorExtension
|
||||||
import org.kiwix.sharedFunctions.setScheduler
|
import org.kiwix.sharedFunctions.setScheduler
|
||||||
@ -78,13 +73,7 @@ internal class BookmarkViewModelTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `initial state is Initialising`() {
|
fun `Initial state is initialising a bookmark state`() {
|
||||||
viewModel.state.test().assertValue(bookmarkState())
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `ExitBookmarks finishes activity`() {
|
|
||||||
viewModel.effects.test().also { viewModel.actions.offer(Exit) }.assertValue(Finish)
|
|
||||||
viewModel.state.test().assertValue(bookmarkState())
|
viewModel.state.test().assertValue(bookmarkState())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,30 +108,6 @@ internal class BookmarkViewModelTest {
|
|||||||
viewModel.state.test().assertValue(bookmarkState(showAll = false))
|
viewModel.state.test().assertValue(bookmarkState(showAll = false))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `OnItemClick selects item if one is selected`() {
|
|
||||||
val bookmark = bookmark(isSelected = true)
|
|
||||||
viewModel.state.postValue(bookmarkState(listOf(bookmark)))
|
|
||||||
viewModel.actions.offer(OnItemClick(bookmark))
|
|
||||||
viewModel.state.test().assertValue(bookmarkState(listOf(bookmark())))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `OnItemClick offers OpenBookmark if none is selected`() {
|
|
||||||
viewModel.state.postValue(bookmarkState(listOf(bookmark())))
|
|
||||||
viewModel.effects.test().also { viewModel.actions.offer(OnItemClick(bookmark())) }
|
|
||||||
.assertValue(OpenPage(bookmark(), zimReaderContainer))
|
|
||||||
viewModel.state.test().assertValue(bookmarkState(listOf(bookmark())))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `OnItemLongClick selects item if none is selected`() {
|
|
||||||
val bookmark = bookmark()
|
|
||||||
viewModel.state.postValue(bookmarkState(listOf(bookmark)))
|
|
||||||
viewModel.actions.offer(OnItemLongClick(bookmark))
|
|
||||||
viewModel.state.test().assertValue(bookmarkState(listOf(bookmark(isSelected = true))))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Filter updates search term`() {
|
fun `Filter updates search term`() {
|
||||||
val searchTerm = "searchTerm"
|
val searchTerm = "searchTerm"
|
||||||
@ -151,7 +116,7 @@ internal class BookmarkViewModelTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
internal fun `UpdateBookmarks updates bookmarks`() {
|
internal fun `UpdatePages updates bookmarks`() {
|
||||||
viewModel.actions.offer(UpdatePages(listOf(bookmark())))
|
viewModel.actions.offer(UpdatePages(listOf(bookmark())))
|
||||||
viewModel.state.test().assertValue(bookmarkState(listOf(bookmark())))
|
viewModel.state.test().assertValue(bookmarkState(listOf(bookmark())))
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,10 @@ import org.kiwix.kiwixmobile.core.page.historyItem
|
|||||||
import org.kiwix.kiwixmobile.core.page.historyState
|
import org.kiwix.kiwixmobile.core.page.historyState
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.ExitActionModeMenu
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.ExitActionModeMenu
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Filter
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Filter
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.OnItemClick
|
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.OnItemLongClick
|
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UpdatePages
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UpdatePages
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteButton
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteButton
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteSelectedPages
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedDeleteSelectedPages
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedShowAllToggle
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.UserClickedShowAllToggle
|
||||||
import org.kiwix.kiwixmobile.core.page.viewmodel.effects.OpenPage
|
|
||||||
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
import org.kiwix.sharedFunctions.InstantExecutorExtension
|
import org.kiwix.sharedFunctions.InstantExecutorExtension
|
||||||
@ -60,7 +57,7 @@ internal class HistoryViewModelTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `initial state is Initialising`() {
|
fun `Initial state is initialising a history state`() {
|
||||||
viewModel.state.test().assertValue(historyState())
|
viewModel.state.test().assertValue(historyState())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,26 +73,14 @@ internal class HistoryViewModelTest {
|
|||||||
@Test
|
@Test
|
||||||
internal fun `UserClickedDeleteButton offers ShowDeleteHistoryDialog`() {
|
internal fun `UserClickedDeleteButton offers ShowDeleteHistoryDialog`() {
|
||||||
viewModel.effects.test().also { viewModel.actions.offer(UserClickedDeleteButton) }
|
viewModel.effects.test().also { viewModel.actions.offer(UserClickedDeleteButton) }
|
||||||
.assertValue(
|
.assertValue(ShowDeleteHistoryDialog(viewModel.effects, historyState(), historyDao))
|
||||||
ShowDeleteHistoryDialog(
|
|
||||||
viewModel.effects,
|
|
||||||
historyState(),
|
|
||||||
historyDao
|
|
||||||
)
|
|
||||||
)
|
|
||||||
viewModel.state.test().assertValue(historyState())
|
viewModel.state.test().assertValue(historyState())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
internal fun `UserClickedDeleteSelectedHistoryItems offers ShowDeleteHistoryDialog`() {
|
internal fun `UserClickedDeleteSelectedHistoryItems offers ShowDeleteHistoryDialog`() {
|
||||||
viewModel.effects.test().also { viewModel.actions.offer(UserClickedDeleteSelectedPages) }
|
viewModel.effects.test().also { viewModel.actions.offer(UserClickedDeleteSelectedPages) }
|
||||||
.assertValue(
|
.assertValue(ShowDeleteHistoryDialog(viewModel.effects, historyState(), historyDao))
|
||||||
ShowDeleteHistoryDialog(
|
|
||||||
viewModel.effects,
|
|
||||||
historyState(),
|
|
||||||
historyDao
|
|
||||||
)
|
|
||||||
)
|
|
||||||
viewModel.state.test().assertValue(historyState())
|
viewModel.state.test().assertValue(historyState())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,30 +92,6 @@ internal class HistoryViewModelTest {
|
|||||||
viewModel.state.test().assertValue(historyState(showAll = false))
|
viewModel.state.test().assertValue(historyState(showAll = false))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `OnItemClick selects item if one is selected`() {
|
|
||||||
val historyItem = historyItem(isSelected = true)
|
|
||||||
viewModel.state.postValue(historyState(listOf(historyItem)))
|
|
||||||
viewModel.actions.offer(OnItemClick(historyItem))
|
|
||||||
viewModel.state.test().assertValue(historyState(listOf(historyItem())))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `OnItemClick offers OpenHistoryItem if none is selected`() {
|
|
||||||
viewModel.state.postValue(historyState(listOf(historyItem())))
|
|
||||||
viewModel.effects.test().also { viewModel.actions.offer(OnItemClick(historyItem())) }
|
|
||||||
.assertValue(OpenPage(historyItem(), zimReaderContainer))
|
|
||||||
viewModel.state.test().assertValue(historyState(listOf(historyItem())))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
internal fun `OnItemLongClick selects item if none is selected`() {
|
|
||||||
val historyItem = historyItem()
|
|
||||||
viewModel.state.postValue(historyState(listOf(historyItem)))
|
|
||||||
viewModel.actions.offer(OnItemLongClick(historyItem))
|
|
||||||
viewModel.state.test().assertValue(historyState(listOf(historyItem(isSelected = true))))
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Filter updates search term`() {
|
fun `Filter updates search term`() {
|
||||||
val searchTerm = "searchTerm"
|
val searchTerm = "searchTerm"
|
||||||
@ -139,7 +100,7 @@ internal class HistoryViewModelTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
internal fun `UpdateHistory updates history`() {
|
internal fun `UpdatePages updates history`() {
|
||||||
viewModel.actions.offer(UpdatePages(listOf(historyItem())))
|
viewModel.actions.offer(UpdatePages(listOf(historyItem())))
|
||||||
viewModel.state.test().assertValue(historyState(listOf(historyItem())))
|
viewModel.state.test().assertValue(historyState(listOf(historyItem())))
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,11 @@ import org.junit.jupiter.api.BeforeEach
|
|||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.extension.ExtendWith
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
import org.kiwix.kiwixmobile.core.dao.PageDao
|
import org.kiwix.kiwixmobile.core.dao.PageDao
|
||||||
|
import org.kiwix.kiwixmobile.core.page.PageImpl
|
||||||
import org.kiwix.kiwixmobile.core.page.adapter.Page
|
import org.kiwix.kiwixmobile.core.page.adapter.Page
|
||||||
|
import org.kiwix.kiwixmobile.core.page.pageState
|
||||||
|
import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Exit
|
||||||
|
import org.kiwix.kiwixmobile.core.page.viewmodel.effects.OpenPage
|
||||||
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
||||||
import org.kiwix.kiwixmobile.core.search.viewmodel.effects.Finish
|
import org.kiwix.kiwixmobile.core.search.viewmodel.effects.Finish
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
@ -42,7 +46,6 @@ internal class PageViewModelTest {
|
|||||||
private val pageDao: PageDao = mockk()
|
private val pageDao: PageDao = mockk()
|
||||||
private val zimReaderContainer: ZimReaderContainer = mockk()
|
private val zimReaderContainer: ZimReaderContainer = mockk()
|
||||||
private val sharedPreferenceUtil: SharedPreferenceUtil = mockk()
|
private val sharedPreferenceUtil: SharedPreferenceUtil = mockk()
|
||||||
private val state = TestablePageState()
|
|
||||||
|
|
||||||
private lateinit var viewModel: TestablePageViewModel
|
private lateinit var viewModel: TestablePageViewModel
|
||||||
private val testScheduler = TestScheduler()
|
private val testScheduler = TestScheduler()
|
||||||
@ -64,9 +67,38 @@ internal class PageViewModelTest {
|
|||||||
viewModel = TestablePageViewModel(zimReaderContainer, sharedPreferenceUtil, pageDao)
|
viewModel = TestablePageViewModel(zimReaderContainer, sharedPreferenceUtil, pageDao)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `initial state is Initialising`() {
|
||||||
|
viewModel.state.test().assertValue(pageState())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Exit finishes activity`() {
|
fun `Exit finishes activity`() {
|
||||||
viewModel.effects.test().also { viewModel.actions.offer(Action.Exit) }.assertValue(Finish)
|
viewModel.effects.test().also { viewModel.actions.offer(Exit) }.assertValue(Finish)
|
||||||
viewModel.state.test().assertValue(state)
|
viewModel.state.test().assertValue(pageState())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
internal fun `OnItemClick selects item if one is selected`() {
|
||||||
|
val page = PageImpl(isSelected = true)
|
||||||
|
viewModel.state.postValue(TestablePageState(listOf(page)))
|
||||||
|
viewModel.actions.offer(Action.OnItemClick(page))
|
||||||
|
viewModel.state.test().assertValue(TestablePageState(listOf(PageImpl())))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
internal fun `OnItemClick offers OpenPage if none is selected`() {
|
||||||
|
viewModel.state.postValue(TestablePageState(listOf(PageImpl())))
|
||||||
|
viewModel.effects.test().also { viewModel.actions.offer(Action.OnItemClick(PageImpl())) }
|
||||||
|
.assertValue(OpenPage(PageImpl(), zimReaderContainer))
|
||||||
|
viewModel.state.test().assertValue(TestablePageState(listOf(PageImpl())))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
internal fun `OnItemLongClick selects item if none is selected`() {
|
||||||
|
val page = PageImpl()
|
||||||
|
viewModel.state.postValue(TestablePageState(listOf(page)))
|
||||||
|
viewModel.actions.offer(Action.OnItemLongClick(page))
|
||||||
|
viewModel.state.test().assertValue(TestablePageState(listOf(PageImpl(isSelected = true))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,19 +23,17 @@ import org.kiwix.kiwixmobile.core.base.SideEffect
|
|||||||
import org.kiwix.kiwixmobile.core.dao.PageDao
|
import org.kiwix.kiwixmobile.core.dao.PageDao
|
||||||
import org.kiwix.kiwixmobile.core.page.adapter.Page
|
import org.kiwix.kiwixmobile.core.page.adapter.Page
|
||||||
import org.kiwix.kiwixmobile.core.page.adapter.PageRelated
|
import org.kiwix.kiwixmobile.core.page.adapter.PageRelated
|
||||||
|
import org.kiwix.kiwixmobile.core.page.pageState
|
||||||
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
|
||||||
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
|
||||||
|
|
||||||
class TestablePageViewModel(
|
class TestablePageViewModel(
|
||||||
override val zimReaderContainer: ZimReaderContainer,
|
zimReaderContainer: ZimReaderContainer,
|
||||||
override val sharedPreferenceUtil: SharedPreferenceUtil,
|
sharedPreferenceUtil: SharedPreferenceUtil,
|
||||||
val dao: PageDao
|
val dao: PageDao
|
||||||
) : PageViewModel<Page, TestablePageState>(dao) {
|
) : PageViewModel<Page, TestablePageState>(dao, sharedPreferenceUtil, zimReaderContainer) {
|
||||||
override fun initialState(): TestablePageState = TestablePageState()
|
|
||||||
|
|
||||||
init {
|
override fun initialState(): TestablePageState = pageState()
|
||||||
addDisposablesToCompositeDisposable()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updatePagesBasedOnFilter(
|
override fun updatePagesBasedOnFilter(
|
||||||
state: TestablePageState,
|
state: TestablePageState,
|
||||||
@ -62,7 +60,7 @@ class TestablePageViewModel(
|
|||||||
override fun createDeletePageDialogEffect(state: TestablePageState): SideEffect<*> = mockk()
|
override fun createDeletePageDialogEffect(state: TestablePageState): SideEffect<*> = mockk()
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestablePageState(
|
data class TestablePageState(
|
||||||
override val pageItems: List<Page> = emptyList(),
|
override val pageItems: List<Page> = emptyList(),
|
||||||
override val visiblePageItems: List<PageRelated> = pageItems,
|
override val visiblePageItems: List<PageRelated> = pageItems,
|
||||||
override val showAll: Boolean = true,
|
override val showAll: Boolean = true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user