diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/NoteRoomDaoTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/NoteRoomDaoTest.kt index 23f216734..60b4cb1ed 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/NoteRoomDaoTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/NoteRoomDaoTest.kt @@ -24,6 +24,7 @@ import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import io.mockk.mockk import io.objectbox.Box +import kotlinx.coroutines.flow.subscribe import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test @@ -57,7 +58,7 @@ class NoteRoomDaoTest { noteRoomDao = db.noteRoomDao() noteRoomDao.deletePages(pagesToDelete) noteRoomDao.deleteNotes(notesItemList) - noteRoomDao.pages().collect { + noteRoomDao.pages().subscribe { Assertions.assertEquals(0, it.size) } } @@ -75,7 +76,7 @@ class NoteRoomDaoTest { notesItem.title = noteTitle noteRoomDao.saveNote(NotesRoomEntity(notesItem)) noteRoomDao.deleteNote(noteTitle) - noteRoomDao.notesAsEntity().collect { + noteRoomDao.notesAsEntity().subscribe { Assertions.assertEquals(0, it.size) } } @@ -93,7 +94,7 @@ class NoteRoomDaoTest { val noteTitle = "abNotesTitle" notesItem.title = noteTitle noteRoomDao.saveNote(NotesRoomEntity(notesItem)) - noteRoomDao.notesAsEntity().collect { + noteRoomDao.notesAsEntity().subscribe { Assertions.assertEquals(1, it.size) Assertions.assertEquals(noteTitle, it.first().noteTitle) } @@ -117,7 +118,7 @@ class NoteRoomDaoTest { noteRoomDao.saveNote(NotesRoomEntity(notesItem3)) noteRoomDao.saveNote(NotesRoomEntity(notesItem4)) noteRoomDao.saveNote(NotesRoomEntity(notesItem5)) - noteRoomDao.notesAsEntity().collect { + noteRoomDao.notesAsEntity().subscribe { Assertions.assertEquals(5, it.size) } } @@ -134,7 +135,7 @@ class NoteRoomDaoTest { newNotesDao.saveNote(newNote) notesBox.put(NotesEntity(newNote)) noteRoomDao.migrationToRoomInsert(notesBox) - noteRoomDao.pages().collect { + noteRoomDao.pages().subscribe { Assertions.assertEquals(1, it.size) } } @@ -156,7 +157,7 @@ class NoteRoomDaoTest { notesBox.put(NotesEntity(newNote)) notesBox.put(NotesEntity(newNote)) noteRoomDao.migrationToRoomInsert(notesBox) - noteRoomDao.pages().collect { + noteRoomDao.pages().subscribe { Assertions.assertEquals(6, it.size) } } diff --git a/buildSrc/src/main/kotlin/Libs.kt b/buildSrc/src/main/kotlin/Libs.kt index 179448ed2..bea0bb27a 100644 --- a/buildSrc/src/main/kotlin/Libs.kt +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -347,4 +347,5 @@ object Libs { const val roomKtx = "androidx.room:room-ktx:" + Versions.roomVersion const val roomCompiler = "androidx.room:room-compiler:" + Versions.roomVersion + const val roomRxjava2 = "androidx.room:room-rxjava2:" + Versions.roomVersion } diff --git a/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt b/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt index 2bd605539..ade6544f3 100644 --- a/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt +++ b/buildSrc/src/main/kotlin/plugin/AllProjectConfigurer.kt @@ -209,6 +209,7 @@ class AllProjectConfigurer { implementation(Libs.rxjava) implementation(Libs.preference_ktx) implementation(Libs.roomKtx) + implementation(Libs.roomRxjava2) kapt(Libs.roomCompiler) } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt index 40ae3641e..10e1d8237 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt @@ -23,10 +23,9 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import io.objectbox.Box +import io.reactivex.Flowable import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.dao.entities.NotesEntity import org.kiwix.kiwixmobile.core.dao.entities.NotesRoomEntity @@ -34,12 +33,12 @@ import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.page.notes.adapter.NoteListItem @Dao -abstract class NotesRoomDao : PageRoomDao { +abstract class NotesRoomDao : PageDao { @Query("SELECT * FROM NotesRoomEntity ORDER BY NotesRoomEntity.noteTitle") - abstract fun notesAsEntity(): Flow> + abstract fun notesAsEntity(): Flowable> - fun notes(): Flow> = notesAsEntity().map { it.map(::NoteListItem) } - override fun pages(): Flow> = notes() + fun notes(): Flowable> = notesAsEntity().map { it.map(::NoteListItem) } + override fun pages(): Flowable> = notes() override fun deletePages(pagesToDelete: List) = deleteNotes(pagesToDelete as List) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/PageDao.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/PageDao.kt index 10ef637cb..eee5cf34a 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/PageDao.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/PageDao.kt @@ -19,18 +19,18 @@ package org.kiwix.kiwixmobile.core.dao import io.reactivex.Flowable -import kotlinx.coroutines.flow.Flow import org.kiwix.kiwixmobile.core.page.adapter.Page -interface PageDao : BasePageDao { - override fun pages(): Flowable> -} - -interface PageRoomDao : BasePageDao { - override fun pages(): Flow> -} - -interface BasePageDao { - fun pages(): Any +interface PageDao { + fun pages(): Flowable> fun deletePages(pagesToDelete: List) } + +// interface PageRoomDao : BasePageDao { +// override fun pages(): Flow> +// } +// +// interface BasePageDao { +// fun pages(): Any +// fun deletePages(pagesToDelete: List) +// } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/NotesEntity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/NotesEntity.kt index d2f49ea95..e7b4f940c 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/NotesEntity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/NotesEntity.kt @@ -22,6 +22,7 @@ import io.objectbox.annotation.Entity import io.objectbox.annotation.Id import org.kiwix.kiwixmobile.core.page.notes.adapter.NoteListItem +@Deprecated("Replaced with the Room") @Entity data class NotesEntity( @Id var id: Long = 0L, diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt index f79f3117c..6c2e5f1c6 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModel.kt @@ -18,6 +18,7 @@ package org.kiwix.kiwixmobile.core.page.bookmark.viewmodel +import androidx.lifecycle.viewModelScope import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem import org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects.ShowDeleteBookmarksDialog @@ -61,7 +62,7 @@ class BookmarkViewModel @Inject constructor( state.copy(pageItems = state.pageItems.map { it.copy(isSelected = false) }) override fun createDeletePageDialogEffect(state: BookmarkState) = - ShowDeleteBookmarksDialog(effects, state, basePageDao) + ShowDeleteBookmarksDialog(effects, state, pageDao, viewModelScope) override fun copyWithNewItems(state: BookmarkState, newItems: List): BookmarkState = state.copy(pageItems = newItems) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt index f10e3bf8d..7312f6bde 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialog.kt @@ -21,8 +21,10 @@ package org.kiwix.kiwixmobile.core.page.bookmark.viewmodel.effects import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import io.reactivex.processors.PublishProcessor +import kotlinx.coroutines.CoroutineScope import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.BasePageDao +import org.kiwix.kiwixmobile.core.dao.PageDao import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.cachedComponent import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem import org.kiwix.kiwixmobile.core.page.viewmodel.PageState @@ -35,14 +37,17 @@ import javax.inject.Inject data class ShowDeleteBookmarksDialog( private val effects: PublishProcessor>, private val state: PageState, - private val pageDao: BasePageDao + private val pageDao: PageDao, + private val coroutineScope: CoroutineScope ) : SideEffect { @Inject lateinit var dialogShower: DialogShower override fun invokeWith(activity: AppCompatActivity) { activity.cachedComponent.inject(this) dialogShower.show( if (state.isInSelectionState) DeleteSelectedBookmarks else DeleteAllBookmarks, - { effects.offer(DeletePageItems(state, pageDao, activity.lifecycleScope)) } + { + effects.offer(DeletePageItems(state, pageDao)) + } ) } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModel.kt index 2a992bc79..45e572c0b 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModel.kt @@ -18,6 +18,7 @@ package org.kiwix.kiwixmobile.core.page.history.viewmodel +import androidx.lifecycle.viewModelScope import org.kiwix.kiwixmobile.core.dao.HistoryDao import org.kiwix.kiwixmobile.core.page.history.adapter.HistoryListItem.HistoryItem import org.kiwix.kiwixmobile.core.page.history.viewmodel.effects.ShowDeleteHistoryDialog @@ -58,7 +59,7 @@ class HistoryViewModel @Inject constructor( } override fun createDeletePageDialogEffect(state: HistoryState) = - ShowDeleteHistoryDialog(effects, state, basePageDao) + ShowDeleteHistoryDialog(effects, state, pageDao, viewModelScope) override fun deselectAllPages(state: HistoryState): HistoryState = state.copy(pageItems = state.pageItems.map { it.copy(isSelected = false) }) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt index 028af3dc2..dcc2dedad 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialog.kt @@ -19,10 +19,9 @@ package org.kiwix.kiwixmobile.core.page.history.viewmodel.effects */ import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.lifecycleScope import io.reactivex.processors.PublishProcessor +import kotlinx.coroutines.CoroutineScope import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.dao.BasePageDao import org.kiwix.kiwixmobile.core.dao.PageDao import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.cachedComponent import org.kiwix.kiwixmobile.core.page.history.viewmodel.HistoryState @@ -35,13 +34,14 @@ import javax.inject.Inject data class ShowDeleteHistoryDialog( private val effects: PublishProcessor>, private val state: HistoryState, - private val pageDao: BasePageDao + private val pageDao: PageDao, + private val coroutineScope: CoroutineScope ) : SideEffect { @Inject lateinit var dialogShower: DialogShower override fun invokeWith(activity: AppCompatActivity) { activity.cachedComponent.inject(this) dialogShower.show(if (state.isInSelectionState) DeleteSelectedHistory else DeleteAllHistory, { - effects.offer(DeletePageItems(state, pageDao, activity.lifecycleScope)) + effects.offer(DeletePageItems(state, pageDao)) }) } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/NotesViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/NotesViewModel.kt index be05634a5..cfd19edf6 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/NotesViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/NotesViewModel.kt @@ -18,7 +18,7 @@ package org.kiwix.kiwixmobile.core.page.notes.viewmodel -import org.kiwix.kiwixmobile.core.dao.NewNoteDao +import androidx.lifecycle.viewModelScope import org.kiwix.kiwixmobile.core.dao.NotesRoomDao import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.page.notes.adapter.NoteListItem @@ -67,7 +67,7 @@ class NotesViewModel @Inject constructor( state.copy(pageItems = state.pageItems.map { it.copy(isSelected = false) }) override fun createDeletePageDialogEffect(state: NotesState) = - ShowDeleteNotesDialog(effects, state, basePageDao) + ShowDeleteNotesDialog(effects, state, pageDao, viewModelScope) override fun onItemClick(page: Page) = ShowOpenNoteDialog(effects, page, zimReaderContainer) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/effects/ShowDeleteNotesDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/effects/ShowDeleteNotesDialog.kt index b10f643e3..0c606fdb3 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/effects/ShowDeleteNotesDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/notes/viewmodel/effects/ShowDeleteNotesDialog.kt @@ -22,8 +22,12 @@ import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import io.reactivex.processors.PublishProcessor +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.BasePageDao +import org.kiwix.kiwixmobile.core.dao.PageDao import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.cachedComponent import org.kiwix.kiwixmobile.core.page.notes.viewmodel.NotesState import org.kiwix.kiwixmobile.core.page.viewmodel.effects.DeletePageItems @@ -35,7 +39,8 @@ import javax.inject.Inject data class ShowDeleteNotesDialog( private val effects: PublishProcessor>, private val state: NotesState, - private val pageDao: BasePageDao + private val pageDao: PageDao, + private val coroutineScope: CoroutineScope ) : SideEffect { @Inject lateinit var dialogShower: DialogShower override fun invokeWith(activity: AppCompatActivity) { @@ -44,7 +49,9 @@ data class ShowDeleteNotesDialog( dialogShower.show( if (state.isInSelectionState) DeleteSelectedNotes else DeleteAllNotes, { - effects.offer(DeletePageItems(state, pageDao, activity.lifecycleScope)) + coroutineScope.launch(Dispatchers.IO) { + effects.offer(DeletePageItems(state, pageDao)) + } } ) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/PageViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/PageViewModel.kt index b1921490f..edda2f164 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/PageViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/PageViewModel.kt @@ -20,16 +20,12 @@ package org.kiwix.kiwixmobile.core.page.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable import io.reactivex.processors.PublishProcessor import io.reactivex.schedulers.Schedulers -import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.dao.BasePageDao import org.kiwix.kiwixmobile.core.dao.PageDao -import org.kiwix.kiwixmobile.core.dao.PageRoomDao import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.page.viewmodel.Action.Exit import org.kiwix.kiwixmobile.core.page.viewmodel.Action.ExitActionModeMenu @@ -46,7 +42,7 @@ import org.kiwix.kiwixmobile.core.search.viewmodel.effects.PopFragmentBackstack import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil abstract class PageViewModel>( - protected val basePageDao: BasePageDao, + protected val pageDao: PageDao, val sharedPreferenceUtil: SharedPreferenceUtil, val zimReaderContainer: ZimReaderContainer ) : ViewModel() { @@ -74,23 +70,11 @@ abstract class PageViewModel>( .subscribe(state::postValue, Throwable::printStackTrace) protected fun addDisposablesToCompositeDisposable() { - when (basePageDao) { - is PageDao -> { - compositeDisposable.addAll( - viewStateReducer(), - basePageDao.pages().subscribeOn(Schedulers.io()) - .subscribe({ actions.offer(UpdatePages(it)) }, Throwable::printStackTrace) - ) - } - is PageRoomDao -> { - compositeDisposable.add(viewStateReducer()) - viewModelScope.launch { - basePageDao.pages().collect { - actions.offer(UpdatePages(it)) - } - } - } - } + compositeDisposable.addAll( + viewStateReducer(), + pageDao.pages().subscribeOn(Schedulers.io()) + .subscribe({ actions.offer(UpdatePages(it)) }, Throwable::printStackTrace) + ) } private fun reduce(action: Action, state: S): S = when (action) { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItems.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItems.kt index 9140c9c47..3e22c083b 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItems.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItems.kt @@ -19,30 +19,20 @@ package org.kiwix.kiwixmobile.core.page.viewmodel.effects import androidx.appcompat.app.AppCompatActivity -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.base.SideEffect -import org.kiwix.kiwixmobile.core.dao.BasePageDao +import org.kiwix.kiwixmobile.core.dao.PageDao import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.page.viewmodel.PageState data class DeletePageItems( private val state: PageState<*>, - private val pageDao: BasePageDao, - private val coroutineScope: CoroutineScope + private val pageDao: PageDao ) : SideEffect { override fun invokeWith(activity: AppCompatActivity) { if (state.isInSelectionState) { pageDao.deletePages(state.pageItems.filter(Page::isSelected)) } else { - coroutineScope.launch(Dispatchers.IO) { - if (state.isInSelectionState) { - pageDao.deletePages(state.pageItems.filter(Page::isSelected)) - } else { - pageDao.deletePages(state.pageItems) - } - } + pageDao.deletePages(state.pageItems) } } } diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModelTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModelTest.kt index 3e555c0bf..d94571c58 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModelTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/BookmarkViewModelTest.kt @@ -18,6 +18,7 @@ package org.kiwix.kiwixmobile.core.page.bookmark.viewmodel +import androidx.lifecycle.viewModelScope import io.mockk.clearAllMocks import io.mockk.every import io.mockk.mockk @@ -132,7 +133,12 @@ internal class BookmarkViewModelTest { assertThat( viewModel.createDeletePageDialogEffect(bookmarkState()) ).isEqualTo( - ShowDeleteBookmarksDialog(viewModel.effects, bookmarkState(), bookmarksDao) + ShowDeleteBookmarksDialog( + viewModel.effects, + bookmarkState(), + bookmarksDao, + viewModel.viewModelScope + ) ) } diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt index 97fb95cb1..55a548b0c 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/bookmark/viewmodel/effects/ShowDeleteBookmarksDialogTest.kt @@ -23,6 +23,7 @@ import io.mockk.mockk import io.mockk.slot import io.mockk.verify import io.reactivex.processors.PublishProcessor +import kotlinx.coroutines.CoroutineScope import org.junit.jupiter.api.Test import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao @@ -39,17 +40,25 @@ internal class ShowDeleteBookmarksDialogTest { private val newBookmarksDao = mockk() val activity = mockk() private val dialogShower = mockk(relaxed = true) + private val coroutineScope: CoroutineScope = mockk(relaxed = true) @Test fun `invoke with shows dialog that offers ConfirmDelete action`() { val showDeleteBookmarksDialog = - ShowDeleteBookmarksDialog(effects, bookmarkState(), newBookmarksDao) + ShowDeleteBookmarksDialog(effects, bookmarkState(), newBookmarksDao, coroutineScope) mockkActivityInjection(showDeleteBookmarksDialog) val lambdaSlot = slot<() -> Unit>() showDeleteBookmarksDialog.invokeWith(activity) verify { dialogShower.show(any(), capture(lambdaSlot)) } lambdaSlot.captured.invoke() - verify { effects.offer(DeletePageItems(bookmarkState(), newBookmarksDao)) } + verify { + effects.offer( + DeletePageItems( + bookmarkState(), + newBookmarksDao + ) + ) + } } private fun mockkActivityInjection(showDeleteBookmarksDialog: ShowDeleteBookmarksDialog) { @@ -65,7 +74,8 @@ internal class ShowDeleteBookmarksDialogTest { ShowDeleteBookmarksDialog( effects, bookmarkState(listOf(bookmark(isSelected = true))), - newBookmarksDao + newBookmarksDao, + coroutineScope ) mockkActivityInjection(showDeleteBookmarksDialog) showDeleteBookmarksDialog.invokeWith(activity) @@ -78,7 +88,8 @@ internal class ShowDeleteBookmarksDialogTest { ShowDeleteBookmarksDialog( effects, bookmarkState(listOf(bookmark())), - newBookmarksDao + newBookmarksDao, + coroutineScope ) mockkActivityInjection(showDeleteBookmarksDialog) showDeleteBookmarksDialog.invokeWith(activity) diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModelTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModelTest.kt index 9832eb270..500303da6 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModelTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/HistoryViewModelTest.kt @@ -1,5 +1,6 @@ package org.kiwix.kiwixmobile.core.page.history.viewmodel +import androidx.lifecycle.viewModelScope import io.mockk.clearAllMocks import io.mockk.every import io.mockk.mockk @@ -101,7 +102,12 @@ internal class HistoryViewModelTest { @Test fun `createDeletePageDialogEffect returns ShowDeleteHistoryDialog`() { assertThat(viewModel.createDeletePageDialogEffect(historyState())).isEqualTo( - ShowDeleteHistoryDialog(viewModel.effects, historyState(), historyDao) + ShowDeleteHistoryDialog( + viewModel.effects, + historyState(), + historyDao, + viewModel.viewModelScope + ) ) } diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt index 4ef94fca9..7239474b4 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/history/viewmodel/effects/ShowDeleteHistoryDialogTest.kt @@ -5,6 +5,7 @@ import io.mockk.mockk import io.mockk.slot import io.mockk.verify import io.reactivex.processors.PublishProcessor +import kotlinx.coroutines.CoroutineScope import org.junit.jupiter.api.Test import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.HistoryDao @@ -21,6 +22,7 @@ internal class ShowDeleteHistoryDialogTest { private val historyDao = mockk() val activity = mockk() private val dialogShower = mockk(relaxed = true) + private val coroutineScope: CoroutineScope = mockk(relaxed = true) @Test fun `invoke with shows dialog that offers ConfirmDelete action`() { @@ -28,7 +30,8 @@ internal class ShowDeleteHistoryDialogTest { ShowDeleteHistoryDialog( effects, historyState(), - historyDao + historyDao, + coroutineScope ) mockkActivityInjection(showDeleteHistoryDialog) val lambdaSlot = slot<() -> Unit>() @@ -44,7 +47,8 @@ internal class ShowDeleteHistoryDialogTest { ShowDeleteHistoryDialog( effects, historyState(listOf(historyItem(isSelected = true))), - historyDao + historyDao, + coroutineScope ) mockkActivityInjection(showDeleteHistoryDialog) showDeleteHistoryDialog.invokeWith(activity) @@ -57,7 +61,8 @@ internal class ShowDeleteHistoryDialogTest { ShowDeleteHistoryDialog( effects, historyState(), - historyDao + historyDao, + coroutineScope ) mockkActivityInjection(showDeleteHistoryDialog) showDeleteHistoryDialog.invokeWith(activity) diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItemsTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItemsTest.kt index 8c583e9be..5ef08d1f2 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItemsTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/DeletePageItemsTest.kt @@ -35,14 +35,20 @@ internal class DeletePageItemsTest { @Test fun `delete with selected items only deletes the selected items`() { item1.isSelected = true - DeletePageItems(historyState(listOf(item1, item2)), pageDao).invokeWith(activity) + DeletePageItems( + historyState(listOf(item1, item2)), + pageDao + ).invokeWith(activity) verify { pageDao.deletePages(listOf(item1)) } } @Test fun `delete with no selected items deletes all items`() { item1.isSelected = false - DeletePageItems(historyState(listOf(item1, item2)), pageDao).invokeWith(activity) + DeletePageItems( + historyState(listOf(item1, item2)), + pageDao + ).invokeWith(activity) verify { pageDao.deletePages(listOf(item1, item2)) } } }