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

View File

@ -1,6 +1,5 @@
package org.kiwix.kiwixmobile.zim_manager.fileselect_view package org.kiwix.kiwixmobile.zim_manager.fileselect_view
import android.util.Log
import io.reactivex.functions.BiFunction import io.reactivex.functions.BiFunction
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import org.kiwix.kiwixmobile.data.ZimContentProvider import org.kiwix.kiwixmobile.data.ZimContentProvider
@ -45,18 +44,12 @@ class StorageObserver @Inject constructor(
private fun convertToBookOnDisk(file: File): BookOnDisk? { private fun convertToBookOnDisk(file: File): BookOnDisk? {
configureZimContentProvider() configureZimContentProvider()
var bookOnDisk: BookOnDisk? = null
if (ZimContentProvider.canIterate && ZimContentProvider.setZimFile(file.absolutePath) != null) { if (ZimContentProvider.canIterate && ZimContentProvider.setZimFile(file.absolutePath) != null) {
try { bookOnDisk = BookOnDisk(book = bookFromZimContentProvider(), file = file)
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() resetZimContentProvider()
} return bookOnDisk
}
return null
} }
private fun bookFromZimContentProvider() = Book().apply { private fun bookFromZimContentProvider() = Book().apply {
@ -72,16 +65,16 @@ class StorageObserver @Inject constructor(
language = ZimContentProvider.getLanguage() language = ZimContentProvider.getLanguage()
} }
private fun configureZimContentProvider() {
if (ZimContentProvider.zimFileName != null) {
ZimContentProvider.originalFileName = ZimContentProvider.zimFileName
}
}
private fun resetZimContentProvider() { private fun resetZimContentProvider() {
if (ZimContentProvider.originalFileName != "") { if (ZimContentProvider.originalFileName != "") {
ZimContentProvider.setZimFile(ZimContentProvider.originalFileName) ZimContentProvider.setZimFile(ZimContentProvider.originalFileName)
} }
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.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.mockkStatic import io.mockk.mockkStatic
import io.mockk.verify
import io.reactivex.processors.PublishProcessor import io.reactivex.processors.PublishProcessor
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test 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.data.ZimContentProvider
import org.kiwix.kiwixmobile.database.newdb.dao.NewDownloadDao import org.kiwix.kiwixmobile.database.newdb.dao.NewDownloadDao
import org.kiwix.kiwixmobile.downloader.model.DownloadModel import org.kiwix.kiwixmobile.downloader.model.DownloadModel
import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity.Book
import org.kiwix.kiwixmobile.resetSchedulers import org.kiwix.kiwixmobile.resetSchedulers
import org.kiwix.kiwixmobile.setScheduler import org.kiwix.kiwixmobile.setScheduler
import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.utils.SharedPreferenceUtil
@ -108,15 +111,7 @@ class StorageObserverTest {
ZimContentProvider.canIterate = true ZimContentProvider.canIterate = true
every { ZimContentProvider.setZimFile("This won't match") } returns "" every { ZimContentProvider.setZimFile("This won't match") } returns ""
every { ZimContentProvider.getZimFileTitle() } returns expectedBook.title expect(expectedBook)
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
storageObserver.booksOnFileSystem storageObserver.booksOnFileSystem
.test() .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
} }
} }