#1238 aim for 100% coverage

This commit is contained in:
Sean Mac Gillicuddy 2019-06-28 16:23:30 +01:00
parent 5079df2469
commit 39a964bf42
3 changed files with 48 additions and 30 deletions

View File

@ -65,8 +65,7 @@ class FileSearch @Inject constructor(private val context: Context) {
directoryRoots(defaultPath)
.minus(Environment.getExternalStorageDirectory().absolutePath)
.fold(mutableListOf<File>(), { acc, root ->
if (File(root).isDirectory) acc.addAll(scanDirectory(root))
acc
acc.apply { addAll(scanDirectory(root)) }
})
private fun directoryRoots(defaultPath: String) = listOf(
@ -78,10 +77,10 @@ class FileSearch @Inject constructor(private val context: Context) {
private fun scanDirectory(directory: String) = filesMatchingExtensions(directory) ?: emptyList()
private fun filesMatchingExtensions(directory: String) = File(directory)
.listFiles { dir, name -> name?.endsWithAny(*zimFileExtensions) ?: false }
.listFiles { _, name -> name.endsWithAny(*zimFileExtensions) }
?.toList()
}
private fun String.endsWithAny(vararg suffixes: String) =
suffixes.fold(false, {acc, s -> acc or endsWith(s) })
suffixes.fold(false, { acc, s -> acc or endsWith(s) })

View File

@ -1,6 +1,5 @@
package org.kiwix.kiwixmobile.zim_manager.fileselect_view
import android.util.Log
import io.reactivex.functions.BiFunction
import io.reactivex.schedulers.Schedulers
import org.kiwix.kiwixmobile.data.ZimContentProvider
@ -45,18 +44,12 @@ class StorageObserver @Inject constructor(
private fun convertToBookOnDisk(file: File): BookOnDisk? {
configureZimContentProvider()
var bookOnDisk: BookOnDisk? = null
if (ZimContentProvider.canIterate && ZimContentProvider.setZimFile(file.absolutePath) != null) {
try {
return BookOnDisk(book = bookFromZimContentProvider(), file = file)
} catch (e: Exception) {
// TODO 20171215 Consider more elegant approaches.
// This is to see if we can catch the exception at all!
Log.e("kiwix-filesearch", "Problem parsing a book entry from the library file. ", e)
} finally {
resetZimContentProvider()
}
bookOnDisk = BookOnDisk(book = bookFromZimContentProvider(), file = file)
}
return null
resetZimContentProvider()
return bookOnDisk
}
private fun bookFromZimContentProvider() = Book().apply {
@ -72,16 +65,16 @@ class StorageObserver @Inject constructor(
language = ZimContentProvider.getLanguage()
}
private fun configureZimContentProvider() {
if (ZimContentProvider.zimFileName != null) {
ZimContentProvider.originalFileName = ZimContentProvider.zimFileName
}
}
private fun resetZimContentProvider() {
if (ZimContentProvider.originalFileName != "") {
ZimContentProvider.setZimFile(ZimContentProvider.originalFileName)
}
ZimContentProvider.originalFileName = ""
}
private fun configureZimContentProvider() {
if (ZimContentProvider.zimFileName != null) {
ZimContentProvider.originalFileName = ZimContentProvider.zimFileName
}
}
}

View File

@ -22,8 +22,10 @@ import io.mockk.clearAllMocks
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.verify
import io.reactivex.processors.PublishProcessor
import io.reactivex.schedulers.Schedulers
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
@ -32,6 +34,7 @@ import org.kiwix.kiwixmobile.bookOnDisk
import org.kiwix.kiwixmobile.data.ZimContentProvider
import org.kiwix.kiwixmobile.database.newdb.dao.NewDownloadDao
import org.kiwix.kiwixmobile.downloader.model.DownloadModel
import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity.Book
import org.kiwix.kiwixmobile.resetSchedulers
import org.kiwix.kiwixmobile.setScheduler
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil
@ -108,15 +111,7 @@ class StorageObserverTest {
ZimContentProvider.canIterate = true
every { ZimContentProvider.setZimFile("This won't match") } returns ""
every { ZimContentProvider.getZimFileTitle() } returns expectedBook.title
every { ZimContentProvider.getId() } returns expectedBook.id
every { ZimContentProvider.getFileSize() } returns expectedBook.size.toInt()
every { ZimContentProvider.getFavicon() } returns expectedBook.favicon
every { ZimContentProvider.getCreator() } returns expectedBook.creator
every { ZimContentProvider.getPublisher() } returns expectedBook.publisher
every { ZimContentProvider.getDate() } returns expectedBook.date
every { ZimContentProvider.getDescription() } returns expectedBook.description
every { ZimContentProvider.getLanguage() } returns expectedBook.language
expect(expectedBook)
storageObserver.booksOnFileSystem
.test()
@ -134,5 +129,36 @@ class StorageObserverTest {
)
)
assertThat(ZimContentProvider.originalFileName).isEqualTo("")
}
@Test
fun `zim provider sets zim file to original file name if it exists`() {
every { downloadModel.fileNameFromUrl } returns "test"
every { file.absolutePath } returns "This is not"
mockkStatic(ZimContentProvider::class)
every { ZimContentProvider.setZimFile(any()) } returns null
ZimContentProvider.zimFileName = "myZimFileName"
storageObserver.booksOnFileSystem
.test()
.also {
downloads.offer(listOf(downloadModel))
files.offer(listOf(file))
}
.assertValues(listOf())
verify { ZimContentProvider.setZimFile("myZimFileName") }
}
private fun expect(expectedBook: Book) {
every { ZimContentProvider.getZimFileTitle() } returns expectedBook.title
every { ZimContentProvider.getId() } returns expectedBook.id
every { ZimContentProvider.getFileSize() } returns expectedBook.size.toInt()
every { ZimContentProvider.getFavicon() } returns expectedBook.favicon
every { ZimContentProvider.getCreator() } returns expectedBook.creator
every { ZimContentProvider.getPublisher() } returns expectedBook.publisher
every { ZimContentProvider.getDate() } returns expectedBook.date
every { ZimContentProvider.getDescription() } returns expectedBook.description
every { ZimContentProvider.getLanguage() } returns expectedBook.language
}
}