@ -6,15 +6,23 @@ package org.mozilla.fenix.library.bookmarks
import android.content.Context
import androidx.appcompat.view.ContextThemeWrapper
import io.mockk.coEvery
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import kotlinx.coroutines.runBlocking
import mozilla.components.concept.menu.candidate.TextMenuCandidate
import mozilla.components.concept.menu.candidate.TextStyle
import mozilla.components.concept.storage.BookmarkNodeType
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.bookmarkStorage
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.library.bookmarks.BookmarkItemMenu.Item
@ -33,6 +41,64 @@ class BookmarkItemMenuTest {
}
}
@Test
fun `delete item has special styling` ( ) = runBlocking {
var deleteItem : TextMenuCandidate ? = null
mockkStatic ( " org.mozilla.fenix.ext.BookmarkNodeKt " ) {
every { any < Context > ( ) . bookmarkStorage } returns mockk ( relaxed = true )
deleteItem = menu . menuItems ( BookmarkNodeType . SEPARATOR , " " ) . last ( )
}
assertNotNull ( deleteItem )
assertEquals ( " Delete " , deleteItem !! . text )
assertEquals (
TextStyle ( color = context . getColorFromAttr ( R . attr . textWarning ) ) ,
deleteItem !! . textStyle ,
)
deleteItem !! . onClick ( )
assertEquals ( Item . Delete , lastItemTapped )
}
@Test
fun `edit item appears for folders` ( ) = runBlocking {
// empty folder
var emptyFolderItems : List < TextMenuCandidate > ? = null
mockkStatic ( " org.mozilla.fenix.ext.BookmarkNodeKt " ) {
every { any < Context > ( ) . bookmarkStorage } returns mockk ( relaxed = true )
emptyFolderItems = menu . menuItems ( BookmarkNodeType . FOLDER , " " )
}
assertNotNull ( emptyFolderItems )
assertEquals ( 2 , emptyFolderItems !! . size )
// not empty
var folderItems : List < TextMenuCandidate > ? = null
mockkStatic ( " org.mozilla.fenix.ext.BookmarkNodeKt " ) {
coEvery { any < Context > ( ) . bookmarkStorage . getTree ( " " ) ?. children } returns listOf ( mockk ( relaxed = true ) )
folderItems = menu . menuItems ( BookmarkNodeType . FOLDER , " " )
}
assertNotNull ( folderItems )
assertEquals ( 3 , folderItems !! . size )
val ( edit , openAll , delete ) = folderItems !!
assertEquals ( " Edit " , edit . text )
assertEquals ( " Open All Bookmarks " , openAll . text )
assertEquals ( " Delete " , delete . text )
edit . onClick ( )
assertEquals ( Item . Edit , lastItemTapped )
openAll . onClick ( )
assertEquals ( Item . OpenAllInTabs , lastItemTapped )
delete . onClick ( )
assertEquals ( Item . Delete , lastItemTapped )
}
@Test
fun `delete item has special styling` ( ) {
val deleteItem = menu . menuItems ( BookmarkNodeType . SEPARATOR ) . last ( )
@ -61,10 +127,16 @@ class BookmarkItemMenuTest {
}
@Test
fun `all item appears for sites` ( ) {
val siteItems = menu . menuItems ( BookmarkNodeType . ITEM )
assertEquals ( 6 , siteItems . size )
val ( edit , copy , share , openInNewTab , openInPrivateTab , delete ) = siteItems
fun `all item appears for sites` ( ) = runBlocking {
var siteItems : List < TextMenuCandidate > ? = null
mockkStatic ( " org.mozilla.fenix.ext.BookmarkNodeKt " ) {
every { any < Context > ( ) . bookmarkStorage } returns mockk ( relaxed = true )
siteItems = menu . menuItems ( BookmarkNodeType . ITEM , " " )
}
assertNotNull ( siteItems )
assertEquals ( 6 , siteItems !! . size )
val ( edit , copy , share , openInNewTab , openInPrivateTab , delete ) = siteItems !!
assertEquals ( " Edit " , edit . text )
assertEquals ( " Copy " , copy . text )