Fixed: The books deletes entities whose file does not exist and Save uses active language unit test cases, which were occasionally failing on CI.

This commit is contained in:
MohitMaliFtechiz 2025-08-07 02:13:27 +05:30
parent b12b654c6a
commit 9e7ccc8e16
2 changed files with 15 additions and 3 deletions

View File

@ -29,8 +29,11 @@ import io.mockk.every
import io.mockk.just
import io.mockk.mockk
import io.mockk.verify
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
@ -171,15 +174,17 @@ class LanguageViewModelTest {
)
}
@OptIn(ExperimentalCoroutinesApi::class)
@Test
fun `Save uses active language`() = runTest {
every { application.getString(any()) } returns ""
val activeLanguage = language(languageCode = "eng").copy(active = true)
val inactiveLanguage = language(languageCode = "fr").copy(active = false)
languageViewModel.effects.test {
val contentState = Content(listOf(activeLanguage, inactiveLanguage))
languageViewModel.state.value = contentState
languageViewModel.state.value = Content(listOf(activeLanguage, inactiveLanguage))
languageViewModel.actions.emit(Save)
advanceUntilIdle()
advanceTimeBy(100)
val effect = awaitItem() as SaveLanguagesAndFinish
assertThat(effect.languages).isEqualTo(activeLanguage)
}

View File

@ -21,6 +21,7 @@ package org.kiwix.kiwixmobile.core.dao
import io.mockk.CapturingSlot
import io.mockk.clearAllMocks
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
@ -50,6 +51,8 @@ import org.kiwix.sharedFunctions.libkiwixBook
import java.io.File
import java.util.concurrent.Callable
const val MOCKK_TIMEOUT_FOR_VERIFICATION = 1000L
internal class NewBookDaoTest {
private val box: Box<BookOnDiskEntity> = mockk(relaxed = true)
private val newBookDao = NewBookDao(box)
@ -77,7 +80,11 @@ internal class NewBookDaoTest {
testFlow(
flow = newBookDao.books(),
triggerAction = {},
assert = { verify { box.remove(listOf(deletedEntity)) } }
assert = {
coVerify(timeout = MOCKK_TIMEOUT_FOR_VERIFICATION) {
box.remove(listOf(deletedEntity))
}
}
)
}