Added test cases for testing all the saved bookmarks should show on the bookmarks screen.

This commit is contained in:
MohitMaliFtechiz 2024-06-25 18:51:53 +05:30
parent 17e630c40b
commit b0c5db4ad3
2 changed files with 103 additions and 23 deletions

View File

@ -18,10 +18,14 @@
package org.kiwix.kiwixmobile.page.bookmarks package org.kiwix.kiwixmobile.page.bookmarks
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.longClick import androidx.test.espresso.action.ViewActions.longClick
import androidx.test.espresso.assertion.ViewAssertions import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.espresso.matcher.ViewMatchers.withText
import applyWithViewHierarchyPrinting import applyWithViewHierarchyPrinting
@ -33,8 +37,10 @@ import org.kiwix.kiwixmobile.Findable.StringId.TextId
import org.kiwix.kiwixmobile.Findable.Text import org.kiwix.kiwixmobile.Findable.Text
import org.kiwix.kiwixmobile.Findable.ViewId import org.kiwix.kiwixmobile.Findable.ViewId
import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.core.page.bookmark.adapter.LibkiwixBookmarkItem
import org.kiwix.kiwixmobile.testutils.TestUtils import org.kiwix.kiwixmobile.testutils.TestUtils
import org.kiwix.kiwixmobile.testutils.TestUtils.testFlakyView import org.kiwix.kiwixmobile.testutils.TestUtils.testFlakyView
import org.kiwix.kiwixmobile.utils.StandardActions.openDrawer
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
fun bookmarks(func: BookmarksRobot.() -> Unit) = fun bookmarks(func: BookmarksRobot.() -> Unit) =
@ -105,4 +111,21 @@ class BookmarksRobot : BaseRobot() {
private fun pauseForBetterTestPerformance() { private fun pauseForBetterTestPerformance() {
BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS_FOR_SEARCH_TEST.toLong()) BaristaSleepInteractions.sleep(TestUtils.TEST_PAUSE_MS_FOR_SEARCH_TEST.toLong())
} }
fun openBookmarkScreen() {
testFlakyView({
openDrawer()
onView(withText(R.string.bookmarks)).perform(click())
})
}
fun testAllBookmarkShowing(bookmarkList: ArrayList<LibkiwixBookmarkItem>) {
bookmarkList.forEachIndexed { index, libkiwixBookmarkItem ->
testFlakyView({
onView(withId(R.id.recycler_view))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(index))
.check(matches(hasDescendant(withText(libkiwixBookmarkItem.title))))
})
}
}
} }

View File

@ -22,10 +22,10 @@ import androidx.core.content.ContextCompat
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.navigation.fragment.NavHostFragment
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.accessibility.AccessibilityChecks import androidx.test.espresso.accessibility.AccessibilityChecks
import androidx.test.internal.runner.junit4.statement.UiThreadStatement
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
import org.junit.Before import org.junit.Before
@ -33,6 +33,8 @@ import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.kiwix.kiwixmobile.BaseActivityTest import org.kiwix.kiwixmobile.BaseActivityTest
import org.kiwix.kiwixmobile.R import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.core.main.CoreReaderFragment
import org.kiwix.kiwixmobile.core.page.bookmark.adapter.LibkiwixBookmarkItem
import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange import org.kiwix.kiwixmobile.core.utils.LanguageUtils.Companion.handleLocaleChange
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import org.kiwix.kiwixmobile.main.KiwixMainActivity import org.kiwix.kiwixmobile.main.KiwixMainActivity
@ -40,6 +42,8 @@ import org.kiwix.kiwixmobile.main.topLevel
import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections import org.kiwix.kiwixmobile.nav.destination.library.LocalLibraryFragmentDirections
import org.kiwix.kiwixmobile.testutils.RetryRule import org.kiwix.kiwixmobile.testutils.RetryRule
import org.kiwix.kiwixmobile.testutils.TestUtils import org.kiwix.kiwixmobile.testutils.TestUtils
import org.kiwix.libkiwix.Book
import org.kiwix.libkiwix.Bookmark
import java.io.File import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.OutputStream import java.io.OutputStream
@ -88,30 +92,9 @@ class LibkiwixBookmarkTest : BaseActivityTest() {
activityScenario.onActivity { activityScenario.onActivity {
kiwixMainActivity = it kiwixMainActivity = it
kiwixMainActivity.navigate(R.id.libraryFragment) kiwixMainActivity.navigate(R.id.libraryFragment)
}
val loadFileStream =
LibkiwixBookmarkTest::class.java.classLoader.getResourceAsStream("testzim.zim")
val zimFile = File(
ContextCompat.getExternalFilesDirs(context, null)[0],
"testzim.zim"
)
if (zimFile.exists()) zimFile.delete()
zimFile.createNewFile()
loadFileStream.use { inputStream ->
val outputStream: OutputStream = FileOutputStream(zimFile)
outputStream.use { it ->
val buffer = ByteArray(inputStream.available())
var length: Int
while (inputStream.read(buffer).also { length = it } > 0) {
it.write(buffer, 0, length)
}
}
}
UiThreadStatement.runOnUiThread {
kiwixMainActivity.navigate( kiwixMainActivity.navigate(
LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader() LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader()
.apply { zimFileUri = zimFile.toUri().toString() } .apply { zimFileUri = getZimFile().toUri().toString() }
) )
} }
bookmarks { bookmarks {
@ -143,4 +126,78 @@ class LibkiwixBookmarkTest : BaseActivityTest() {
clickBookmarksOnNavDrawer(BookmarksRobot::assertBookmarkSaved) clickBookmarksOnNavDrawer(BookmarksRobot::assertBookmarkSaved)
} }
} }
@Test
fun testSavedBookmarksShowingOnBookmarkScreen() {
val zimFile = getZimFile()
activityScenario.onActivity {
kiwixMainActivity = it
kiwixMainActivity.navigate(R.id.libraryFragment)
kiwixMainActivity.navigate(
LocalLibraryFragmentDirections.actionNavigationLibraryToNavigationReader()
.apply { zimFileUri = zimFile.toUri().toString() }
)
}
bookmarks {
// delete any bookmark if already saved to properly perform this test case.
longClickOnSaveBookmarkImage()
clickOnTrashIcon()
assertDeleteBookmarksDialogDisplayed()
clickOnDeleteButton()
assertNoBookMarkTextDisplayed()
pressBack()
}
val navHostFragment: NavHostFragment =
kiwixMainActivity.supportFragmentManager
.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val coreReaderFragment = navHostFragment.childFragmentManager.fragments[0] as CoreReaderFragment
val libKiwixBook = Book().apply {
update(coreReaderFragment.zimReaderContainer?.zimFileReader?.jniKiwixReader)
}
val bookmarkList = arrayListOf<LibkiwixBookmarkItem>()
for (i in 1..500) {
val bookmark = Bookmark().apply {
bookId = coreReaderFragment.zimReaderContainer?.zimFileReader?.id
title = "bookmark$i"
url = "http://kiwix.org/demoBookmark$i"
bookTitle = libKiwixBook.title
}
val libkiwixItem =
LibkiwixBookmarkItem(
bookmark,
coreReaderFragment.zimReaderContainer?.zimFileReader?.favicon,
coreReaderFragment.zimReaderContainer?.zimFileReader?.zimFile?.canonicalPath
)
coreReaderFragment.libkiwixBookmarks?.saveBookmark(libkiwixItem).also {
bookmarkList.add(libkiwixItem)
}
}
bookmarks {
// test all the saved bookmarks are showing on the bookmarks screen
openBookmarkScreen()
testAllBookmarkShowing(bookmarkList)
}
}
private fun getZimFile(): File {
val loadFileStream =
LibkiwixBookmarkTest::class.java.classLoader.getResourceAsStream("testzim.zim")
val zimFile = File(
ContextCompat.getExternalFilesDirs(context, null)[0],
"testzim.zim"
)
if (zimFile.exists()) zimFile.delete()
zimFile.createNewFile()
loadFileStream.use { inputStream ->
val outputStream: OutputStream = FileOutputStream(zimFile)
outputStream.use { it ->
val buffer = ByteArray(inputStream.available())
var length: Int
while (inputStream.read(buffer).also { length = it } > 0) {
it.write(buffer, 0, length)
}
}
}
return zimFile
}
} }