|
|
|
@ -13,25 +13,36 @@ import io.mockk.verify
|
|
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
|
|
|
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.createTab
|
|
|
|
|
import mozilla.components.browser.state.store.BrowserStore
|
|
|
|
|
import mozilla.components.feature.tabs.TabsUseCases
|
|
|
|
|
import mozilla.components.support.test.ext.joinBlocking
|
|
|
|
|
import mozilla.components.support.test.robolectric.testContext
|
|
|
|
|
import mozilla.components.support.test.rule.MainCoroutineRule
|
|
|
|
|
import mozilla.telemetry.glean.testing.GleanTestRule
|
|
|
|
|
import org.junit.Assert.assertFalse
|
|
|
|
|
import org.junit.Assert.assertTrue
|
|
|
|
|
import org.junit.Before
|
|
|
|
|
import org.junit.Rule
|
|
|
|
|
import org.junit.Test
|
|
|
|
|
import org.junit.runner.RunWith
|
|
|
|
|
import org.mozilla.fenix.GleanMetrics.RecentTabs
|
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
|
import org.mozilla.fenix.components.AppStore
|
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
|
import org.mozilla.fenix.components.metrics.MetricController
|
|
|
|
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
|
|
|
|
|
|
|
|
|
@OptIn(ExperimentalCoroutinesApi::class)
|
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
|
|
|
class RecentTabControllerTest {
|
|
|
|
|
|
|
|
|
|
@get:Rule
|
|
|
|
|
val coroutinesTestRule = MainCoroutineRule()
|
|
|
|
|
|
|
|
|
|
@get:Rule
|
|
|
|
|
val gleanTestRule = GleanTestRule(testContext)
|
|
|
|
|
|
|
|
|
|
private val navController: NavController = mockk(relaxed = true)
|
|
|
|
|
private val selectTabUseCase: TabsUseCases = mockk(relaxed = true)
|
|
|
|
|
private val metrics: MetricController = mockk(relaxed = true)
|
|
|
|
@ -60,6 +71,9 @@ class RecentTabControllerTest {
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleRecentTabClicked() {
|
|
|
|
|
assertFalse(RecentTabs.recentTabOpened.testHasValue())
|
|
|
|
|
assertFalse(RecentTabs.inProgressMediaTabOpened.testHasValue())
|
|
|
|
|
|
|
|
|
|
every { navController.currentDestination } returns mockk {
|
|
|
|
|
every { id } returns R.id.homeFragment
|
|
|
|
|
}
|
|
|
|
@ -76,12 +90,42 @@ class RecentTabControllerTest {
|
|
|
|
|
verify {
|
|
|
|
|
selectTabUseCase.selectTab.invoke(tab.id)
|
|
|
|
|
navController.navigate(R.id.browserFragment)
|
|
|
|
|
metrics.track(Event.OpenRecentTab)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(RecentTabs.recentTabOpened.testHasValue())
|
|
|
|
|
assertFalse(RecentTabs.inProgressMediaTabOpened.testHasValue())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleRecentTabClickedForMediaTab() {
|
|
|
|
|
assertFalse(RecentTabs.recentTabOpened.testHasValue())
|
|
|
|
|
assertFalse(RecentTabs.inProgressMediaTabOpened.testHasValue())
|
|
|
|
|
|
|
|
|
|
every { navController.currentDestination } returns mockk {
|
|
|
|
|
every { id } returns R.id.homeFragment
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val inProgressMediaTab = createTab(
|
|
|
|
|
url = "mediaUrl", id = "2",
|
|
|
|
|
lastMediaAccessState = LastMediaAccessState("https://mozilla.com", 123, true)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
store.dispatch(TabListAction.AddTabAction(inProgressMediaTab)).joinBlocking()
|
|
|
|
|
store.dispatch(TabListAction.SelectTabAction(inProgressMediaTab.id)).joinBlocking()
|
|
|
|
|
|
|
|
|
|
controller.handleRecentTabClicked(inProgressMediaTab.id)
|
|
|
|
|
|
|
|
|
|
verify {
|
|
|
|
|
selectTabUseCase.selectTab.invoke(inProgressMediaTab.id)
|
|
|
|
|
navController.navigate(R.id.browserFragment)
|
|
|
|
|
}
|
|
|
|
|
assertFalse(RecentTabs.recentTabOpened.testHasValue())
|
|
|
|
|
assertTrue(RecentTabs.inProgressMediaTabOpened.testHasValue())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleRecentTabShowAllClickedFromHome() {
|
|
|
|
|
assertFalse(RecentTabs.showAllClicked.testHasValue())
|
|
|
|
|
|
|
|
|
|
every { navController.currentDestination } returns mockk {
|
|
|
|
|
every { id } returns R.id.homeFragment
|
|
|
|
|
}
|
|
|
|
@ -93,15 +137,18 @@ class RecentTabControllerTest {
|
|
|
|
|
navController.navigate(
|
|
|
|
|
match<NavDirections> { it.actionId == R.id.action_global_tabsTrayFragment }
|
|
|
|
|
)
|
|
|
|
|
metrics.track(Event.ShowAllRecentTabs)
|
|
|
|
|
}
|
|
|
|
|
verify(exactly = 0) {
|
|
|
|
|
navController.navigateUp()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assertTrue(RecentTabs.showAllClicked.testHasValue())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleRecentTabShowAllClickedFromSearchDialog() {
|
|
|
|
|
assertFalse(RecentTabs.showAllClicked.testHasValue())
|
|
|
|
|
|
|
|
|
|
every { navController.currentDestination } returns mockk {
|
|
|
|
|
every { id } returns R.id.searchDialogFragment
|
|
|
|
|
}
|
|
|
|
@ -114,7 +161,8 @@ class RecentTabControllerTest {
|
|
|
|
|
navController.navigate(
|
|
|
|
|
match<NavDirections> { it.actionId == R.id.action_global_tabsTrayFragment }
|
|
|
|
|
)
|
|
|
|
|
metrics.track(Event.ShowAllRecentTabs)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assertTrue(RecentTabs.showAllClicked.testHasValue())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|