@ -4,7 +4,6 @@
package org.mozilla.fenix.home
import android.graphics.Bitmap
import io.mockk.mockk
import kotlinx.coroutines.ExperimentalCoroutinesApi
import mozilla.components.browser.state.action.ContentAction.UpdateIconAction
@ -13,12 +12,9 @@ import mozilla.components.browser.state.action.MediaSessionAction
import mozilla.components.browser.state.action.TabListAction
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.LastMediaAccessState
import mozilla.components.browser.state.state.TabGroup
import mozilla.components.browser.state.state.TabPartition
import mozilla.components.browser.state.state.createTab
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.mediasession.MediaSession
import mozilla.components.concept.storage.HistoryMetadataKey
import mozilla.components.feature.media.middleware.LastMediaAccessMiddleware
import mozilla.components.support.test.ext.joinBlocking
import mozilla.components.support.test.libstate.ext.waitUntilIdle
@ -38,7 +34,6 @@ import org.mozilla.fenix.components.appstate.AppAction
import org.mozilla.fenix.components.appstate.AppState
import org.mozilla.fenix.home.recenttabs.RecentTab
import org.mozilla.fenix.home.recenttabs.RecentTabsListFeature
import org.mozilla.fenix.tabstray.SEARCH_TERM_TAB_GROUPS
class RecentTabsListFeatureTest {
@ -388,245 +383,4 @@ class RecentTabsListFeatureTest {
assertTrue ( appStore . state . recentTabs [ 0 ] is RecentTab . Tab )
assertEquals ( selectedTab , ( appStore . state . recentTabs [ 0 ] as RecentTab . Tab ) . state )
}
@Test
fun `GIVEN only tabs from a search group WHEN the feature starts THEN dispatch the selected tab group as a recent tab list` ( ) {
val tab1 = createTab (
url = " https://www.mozilla.org " ,
id = " 1 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tab2 = createTab (
url = " https://www.mozilla.org " ,
id = " 2 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tabs = listOf ( tab1 , tab2 )
val tabGroup = TabGroup ( " Test search term " , " " , listOf ( tab1 . id , tab2 . id ) )
val browserStore = BrowserStore (
BrowserState (
tabs = tabs ,
tabPartitions = mapOf ( Pair ( SEARCH _TERM _TAB _GROUPS , TabPartition ( SEARCH _TERM _TAB _GROUPS , listOf ( tabGroup ) ) ) ) ,
selectedTabId = " 1 "
)
)
val feature = RecentTabsListFeature (
browserStore = browserStore ,
appStore = appStore
)
feature . start ( )
appStore . waitUntilIdle ( )
assertEquals ( 1 , appStore . state . recentTabs . size )
val searchGroup = ( appStore . state . recentTabs [ 0 ] as RecentTab . SearchGroup )
assertEquals ( searchGroup . searchTerm , " Test search term " )
assertEquals ( searchGroup . tabId , " 1 " )
assertEquals ( searchGroup . url , " https://www.mozilla.org " )
assertEquals ( searchGroup . thumbnail , null )
assertEquals ( searchGroup . count , 2 )
}
@Test
fun `GIVEN tabs with different search terms are opened WHEN the feature starts THEN dispatch the last active tab and last active search group as recent tabs list` ( ) {
val tab1 = createTab (
url = " https://www.mozilla.org " ,
id = " 1 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " Test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tab2 = createTab (
url = " https://www.mozilla.org " ,
id = " 2 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " Test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tab3 = createTab ( url = " https://www.mozilla.org/firefox " , id = " 3 " )
val tabs = listOf ( tab1 , tab2 , tab3 )
val tabGroup = TabGroup ( " Test search term " , " " , listOf ( tab1 . id , tab2 . id ) )
val browserStore = BrowserStore (
BrowserState (
tabs = tabs ,
tabPartitions = mapOf ( Pair ( SEARCH _TERM _TAB _GROUPS , TabPartition ( SEARCH _TERM _TAB _GROUPS , listOf ( tabGroup ) ) ) ) ,
selectedTabId = " 1 "
)
)
val feature = RecentTabsListFeature (
browserStore = browserStore ,
appStore = appStore
)
feature . start ( )
appStore . waitUntilIdle ( )
assertEquals ( 2 , appStore . state . recentTabs . size )
assertTrue ( appStore . state . recentTabs [ 0 ] is RecentTab . Tab )
assertEquals ( tab3 , ( appStore . state . recentTabs [ 0 ] as RecentTab . Tab ) . state )
val searchGroup = ( appStore . state . recentTabs [ 1 ] as RecentTab . SearchGroup )
assertEquals ( searchGroup . searchTerm , " Test search term " )
assertEquals ( searchGroup . tabId , " 1 " )
assertEquals ( searchGroup . url , " https://www.mozilla.org " )
assertEquals ( searchGroup . thumbnail , null )
assertEquals ( searchGroup . count , 2 )
}
@Test
fun `GIVEN a tab group with one tab and a selected tab WHEN the feature starts THEN dispatch selected tab as a recent tab list` ( ) {
val tab1 = createTab (
url = " https://www.mozilla.org " ,
id = " 1 "
)
val tab2 = createTab (
url = " https://www.mozilla.org " ,
id = " 2 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tabs = listOf ( tab1 , tab2 )
val browserStore = BrowserStore (
BrowserState (
tabs = tabs ,
selectedTabId = " 1 "
)
)
val feature = RecentTabsListFeature (
browserStore = browserStore ,
appStore = appStore
)
feature . start ( )
appStore . waitUntilIdle ( )
assertEquals ( 1 , appStore . state . recentTabs . size )
assertTrue ( appStore . state . recentTabs [ 0 ] is RecentTab . Tab )
assertEquals ( tab1 , ( appStore . state . recentTabs [ 0 ] as RecentTab . Tab ) . state )
}
@Test
fun `GIVEN a tab group with two tabs and a selected tab WHEN the feature starts THEN dispatch both the selected tab and the selected tab group as a recent tab list` ( ) {
val tab1 = createTab (
url = " https://www.mozilla.org " ,
id = " 1 "
)
val tab2 = createTab (
url = " https://www.mozilla.org " ,
id = " 2 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tab3 = createTab (
url = " https://www.mozilla.org " ,
id = " 3 " ,
historyMetadata = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " test search term " ,
referrerUrl = " https://www.mozilla.org "
)
)
val tabs = listOf ( tab1 , tab2 , tab3 )
val tabGroup = TabGroup ( " test search term " , " " , listOf ( tab2 . id , tab3 . id ) )
val browserStore = BrowserStore (
BrowserState (
tabs = tabs ,
tabPartitions = mapOf ( Pair ( SEARCH _TERM _TAB _GROUPS , TabPartition ( SEARCH _TERM _TAB _GROUPS , listOf ( tabGroup ) ) ) ) ,
selectedTabId = " 1 "
)
)
val feature = RecentTabsListFeature (
browserStore = browserStore ,
appStore = appStore
)
feature . start ( )
appStore . waitUntilIdle ( )
assertEquals ( 2 , appStore . state . recentTabs . size )
assertTrue ( appStore . state . recentTabs [ 0 ] is RecentTab . Tab )
assertEquals ( tab1 , ( appStore . state . recentTabs [ 0 ] as RecentTab . Tab ) . state )
val searchGroup = ( appStore . state . recentTabs [ 1 ] as RecentTab . SearchGroup )
assertEquals ( searchGroup . searchTerm , " test search term " )
assertEquals ( searchGroup . tabId , " 2 " )
assertEquals ( searchGroup . url , " https://www.mozilla.org " )
assertEquals ( searchGroup . thumbnail , null )
assertEquals ( searchGroup . count , 2 )
}
@Test
fun `GIVEN a valid inProgressMediaTabId, selected tab and tab group exists WHEN the feature starts THEN dispatch all as as a recent tabs list` ( ) {
val mediaTab = createTab (
url = " https://mozilla.com " , id = " 42 " ,
lastMediaAccessState = LastMediaAccessState ( " https://mozilla.com " , 123 )
)
val selectedTab = createTab ( " https://mozilla.com " , id = " 43 " )
val historyMetadataKey = HistoryMetadataKey (
url = " https://www.mozilla.org " ,
searchTerm = " test search term " ,
referrerUrl = " https://www.mozilla.org "
)
val thumbnail = Bitmap . createBitmap ( 100 , 100 , Bitmap . Config . ARGB _8888 )
val searchTermTab1 = createTab (
url = " https://www.mozilla.org " ,
id = " 44 " ,
thumbnail = thumbnail ,
historyMetadata = historyMetadataKey
)
val searchTermTab2 = createTab (
url = " https://www.mozilla.org " ,
id = " 45 " ,
thumbnail = thumbnail ,
historyMetadata = historyMetadataKey
)
val searchTermTabGroup = TabGroup ( historyMetadataKey . searchTerm !! , " " , listOf ( searchTermTab1 . id , searchTermTab2 . id ) )
val browserStore = BrowserStore (
BrowserState (
tabs = listOf ( mediaTab , selectedTab , searchTermTab1 , searchTermTab2 ) ,
tabPartitions = mapOf ( Pair ( SEARCH _TERM _TAB _GROUPS , TabPartition ( SEARCH _TERM _TAB _GROUPS , listOf ( searchTermTabGroup ) ) ) ) ,
selectedTabId = " 43 "
)
)
val feature = RecentTabsListFeature (
browserStore = browserStore ,
appStore = appStore
)
feature . start ( )
appStore . waitUntilIdle ( )
assertEquals ( 2 , appStore . state . recentTabs . size )
assertTrue ( appStore . state . recentTabs [ 0 ] is RecentTab . Tab )
assertEquals ( selectedTab , ( appStore . state . recentTabs [ 0 ] as RecentTab . Tab ) . state )
val searchGroup = ( appStore . state . recentTabs [ 1 ] as RecentTab . SearchGroup )
assertEquals ( searchGroup . searchTerm , " test search term " )
assertEquals ( searchGroup . tabId , " 44 " )
assertEquals ( searchGroup . url , " https://www.mozilla.org " )
assertEquals ( searchGroup . thumbnail , thumbnail )
assertEquals ( searchGroup . count , 2 )
}
}