[fenix] For https://github.com/mozilla-mobile/fenix/issues/24512 - Remove Event.wrapper for RecentlyClosedTabs metrics

pull/600/head
Alexandru2909 2 years ago committed by mergify[bot]
parent 624dc9baa3
commit ec74b43e2b

@ -57,18 +57,6 @@ sealed class Event {
object HistorySearchTermGroupRemoveAll : Event() object HistorySearchTermGroupRemoveAll : Event()
object HistorySearchIconTapped : Event() object HistorySearchIconTapped : Event()
object HistorySearchResultTapped : Event() object HistorySearchResultTapped : Event()
object RecentlyClosedTabsOpened : Event()
object RecentlyClosedTabsClosed : Event()
object RecentlyClosedTabsShowFullHistory : Event()
object RecentlyClosedTabsOpenTab : Event()
object RecentlyClosedTabsDeleteTab : Event()
object RecentlyClosedTabsMenuClose : Event()
object RecentlyClosedTabsMenuShare : Event()
object RecentlyClosedTabsMenuDelete : Event()
object RecentlyClosedTabsMenuOpenInNormalTab : Event()
object RecentlyClosedTabsMenuOpenInPrivateTab : Event()
object RecentlyClosedTabsEnterMultiselect : Event()
object RecentlyClosedTabsExitMultiselect : Event()
object ReaderModeAvailable : Event() object ReaderModeAvailable : Event()
object ReaderModeOpened : Event() object ReaderModeOpened : Event()
object ReaderModeClosed : Event() object ReaderModeClosed : Event()

@ -34,7 +34,6 @@ import org.mozilla.fenix.GleanMetrics.ReaderMode
import org.mozilla.fenix.GleanMetrics.RecentBookmarks import org.mozilla.fenix.GleanMetrics.RecentBookmarks
import org.mozilla.fenix.GleanMetrics.RecentSearches import org.mozilla.fenix.GleanMetrics.RecentSearches
import org.mozilla.fenix.GleanMetrics.RecentTabs import org.mozilla.fenix.GleanMetrics.RecentTabs
import org.mozilla.fenix.GleanMetrics.RecentlyClosedTabs
import org.mozilla.fenix.GleanMetrics.RecentlyVisitedHomepage import org.mozilla.fenix.GleanMetrics.RecentlyVisitedHomepage
import org.mozilla.fenix.GleanMetrics.SearchTerms import org.mozilla.fenix.GleanMetrics.SearchTerms
import org.mozilla.fenix.GleanMetrics.StartOnHome import org.mozilla.fenix.GleanMetrics.StartOnHome
@ -222,42 +221,6 @@ private val Event.wrapper: EventWrapper<*>?
is Event.HistorySearchResultTapped -> EventWrapper<NoExtraKeys>( is Event.HistorySearchResultTapped -> EventWrapper<NoExtraKeys>(
{ History.searchResultTapped.record(it) } { History.searchResultTapped.record(it) }
) )
is Event.RecentlyClosedTabsOpened -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.opened.record(it) }
)
is Event.RecentlyClosedTabsClosed -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.closed.record(it) }
)
is Event.RecentlyClosedTabsShowFullHistory -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.showFullHistory.record(it) }
)
is Event.RecentlyClosedTabsOpenTab -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.openTab.record(it) }
)
is Event.RecentlyClosedTabsDeleteTab -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.deleteTab.record(it) }
)
is Event.RecentlyClosedTabsMenuClose -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.menuClose.record(it) }
)
is Event.RecentlyClosedTabsMenuShare -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.menuShare.record(it) }
)
is Event.RecentlyClosedTabsMenuDelete -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.menuDelete.record(it) }
)
is Event.RecentlyClosedTabsMenuOpenInNormalTab -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.menuOpenInNormalTab.record(it) }
)
is Event.RecentlyClosedTabsMenuOpenInPrivateTab -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.menuOpenInPrivateTab.record(it) }
)
is Event.RecentlyClosedTabsEnterMultiselect -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.enterMultiselect.record(it) }
)
is Event.RecentlyClosedTabsExitMultiselect -> EventWrapper<NoExtraKeys>(
{ RecentlyClosedTabs.exitMultiselect.record(it) }
)
is Event.ReaderModeAvailable -> EventWrapper<NoExtraKeys>( is Event.ReaderModeAvailable -> EventWrapper<NoExtraKeys>(
{ ReaderMode.available.record(it) } { ReaderMode.available.record(it) }
) )

@ -14,12 +14,12 @@ import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.prompt.ShareData import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.feature.recentlyclosed.RecentlyClosedTabsStorage import mozilla.components.feature.recentlyclosed.RecentlyClosedTabsStorage
import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.service.glean.private.NoExtras
import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.GleanMetrics.RecentlyClosedTabs
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions")
interface RecentlyClosedController { interface RecentlyClosedController {
@ -35,7 +35,7 @@ interface RecentlyClosedController {
fun handleBackPressed(): Boolean fun handleBackPressed(): Boolean
} }
@Suppress("TooManyFunctions") @Suppress("TooManyFunctions", "LongParameterList")
class DefaultRecentlyClosedController( class DefaultRecentlyClosedController(
private val navController: NavController, private val navController: NavController,
private val browserStore: BrowserStore, private val browserStore: BrowserStore,
@ -43,7 +43,6 @@ class DefaultRecentlyClosedController(
private val recentlyClosedTabsStorage: RecentlyClosedTabsStorage, private val recentlyClosedTabsStorage: RecentlyClosedTabsStorage,
private val tabsUseCases: TabsUseCases, private val tabsUseCases: TabsUseCases,
private val activity: HomeActivity, private val activity: HomeActivity,
private val metrics: MetricController,
private val lifecycleScope: CoroutineScope, private val lifecycleScope: CoroutineScope,
private val openToBrowser: (url: String, mode: BrowsingMode?) -> Unit private val openToBrowser: (url: String, mode: BrowsingMode?) -> Unit
) : RecentlyClosedController { ) : RecentlyClosedController {
@ -53,9 +52,9 @@ class DefaultRecentlyClosedController(
override fun handleOpen(tabs: Set<TabState>, mode: BrowsingMode?) { override fun handleOpen(tabs: Set<TabState>, mode: BrowsingMode?) {
if (mode == BrowsingMode.Normal) { if (mode == BrowsingMode.Normal) {
metrics.track(Event.RecentlyClosedTabsMenuOpenInNormalTab) RecentlyClosedTabs.menuOpenInNormalTab.record(NoExtras())
} else if (mode == BrowsingMode.Private) { } else if (mode == BrowsingMode.Private) {
metrics.track(Event.RecentlyClosedTabsMenuOpenInPrivateTab) RecentlyClosedTabs.menuOpenInPrivateTab.record(NoExtras())
} }
recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll)
tabs.forEach { tab -> handleOpen(tab, mode) } tabs.forEach { tab -> handleOpen(tab, mode) }
@ -63,25 +62,25 @@ class DefaultRecentlyClosedController(
override fun handleSelect(tab: TabState) { override fun handleSelect(tab: TabState) {
if (recentlyClosedStore.state.selectedTabs.isEmpty()) { if (recentlyClosedStore.state.selectedTabs.isEmpty()) {
metrics.track(Event.RecentlyClosedTabsEnterMultiselect) RecentlyClosedTabs.enterMultiselect.record(NoExtras())
} }
recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Select(tab)) recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Select(tab))
} }
override fun handleDeselect(tab: TabState) { override fun handleDeselect(tab: TabState) {
if (recentlyClosedStore.state.selectedTabs.size == 1) { if (recentlyClosedStore.state.selectedTabs.size == 1) {
metrics.track(Event.RecentlyClosedTabsExitMultiselect) RecentlyClosedTabs.exitMultiselect.record(NoExtras())
} }
recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Deselect(tab)) recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Deselect(tab))
} }
override fun handleDelete(tab: TabState) { override fun handleDelete(tab: TabState) {
metrics.track(Event.RecentlyClosedTabsDeleteTab) RecentlyClosedTabs.deleteTab.record(NoExtras())
browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tab)) browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tab))
} }
override fun handleDelete(tabs: Set<TabState>) { override fun handleDelete(tabs: Set<TabState>) {
metrics.track(Event.RecentlyClosedTabsMenuDelete) RecentlyClosedTabs.menuDelete.record(NoExtras())
recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll)
tabs.forEach { tab -> tabs.forEach { tab ->
browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tab)) browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tab))
@ -89,7 +88,7 @@ class DefaultRecentlyClosedController(
} }
override fun handleNavigateToHistory() { override fun handleNavigateToHistory() {
metrics.track(Event.RecentlyClosedTabsShowFullHistory) RecentlyClosedTabs.showFullHistory.record(NoExtras())
navController.navigate( navController.navigate(
RecentlyClosedFragmentDirections.actionGlobalHistoryFragment(), RecentlyClosedFragmentDirections.actionGlobalHistoryFragment(),
NavOptions.Builder().setPopUpTo(R.id.historyFragment, true).build() NavOptions.Builder().setPopUpTo(R.id.historyFragment, true).build()
@ -97,7 +96,7 @@ class DefaultRecentlyClosedController(
} }
override fun handleShare(tabs: Set<TabState>) { override fun handleShare(tabs: Set<TabState>) {
metrics.track(Event.RecentlyClosedTabsMenuShare) RecentlyClosedTabs.menuShare.record(NoExtras())
val shareData = tabs.map { ShareData(url = it.url, title = it.title) } val shareData = tabs.map { ShareData(url = it.url, title = it.title) }
navController.navigate( navController.navigate(
RecentlyClosedFragmentDirections.actionGlobalShareFragment( RecentlyClosedFragmentDirections.actionGlobalShareFragment(
@ -108,7 +107,7 @@ class DefaultRecentlyClosedController(
override fun handleRestore(item: TabState) { override fun handleRestore(item: TabState) {
lifecycleScope.launch { lifecycleScope.launch {
metrics.track(Event.RecentlyClosedTabsOpenTab) RecentlyClosedTabs.openTab.record(NoExtras())
tabsUseCases.restore(item, recentlyClosedTabsStorage.engineStateStorage()) tabsUseCases.restore(item, recentlyClosedTabsStorage.engineStateStorage())
browserStore.dispatch( browserStore.dispatch(
@ -123,11 +122,11 @@ class DefaultRecentlyClosedController(
override fun handleBackPressed(): Boolean { override fun handleBackPressed(): Boolean {
return if (recentlyClosedStore.state.selectedTabs.isNotEmpty()) { return if (recentlyClosedStore.state.selectedTabs.isNotEmpty()) {
metrics.track(Event.RecentlyClosedTabsExitMultiselect) RecentlyClosedTabs.exitMultiselect.record(NoExtras())
recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll)
true true
} else { } else {
metrics.track(Event.RecentlyClosedTabsClosed) RecentlyClosedTabs.closed.record(NoExtras())
false false
} }
} }

@ -21,13 +21,13 @@ import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.lib.state.ext.flowScoped import mozilla.components.lib.state.ext.flowScoped
import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged
import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.GleanMetrics.RecentlyClosedTabs
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.components.StoreProvider import org.mozilla.fenix.components.StoreProvider
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.databinding.FragmentRecentlyClosedTabsBinding import org.mozilla.fenix.databinding.FragmentRecentlyClosedTabsBinding
import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.setTextColor import org.mozilla.fenix.ext.setTextColor
@ -44,8 +44,6 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
private lateinit var recentlyClosedInteractor: RecentlyClosedFragmentInteractor private lateinit var recentlyClosedInteractor: RecentlyClosedFragmentInteractor
private lateinit var recentlyClosedController: RecentlyClosedController private lateinit var recentlyClosedController: RecentlyClosedController
private lateinit var metrics: MetricController
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
showToolbar(getString(R.string.library_recently_closed_tabs)) showToolbar(getString(R.string.library_recently_closed_tabs))
@ -69,7 +67,7 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
return when (item.itemId) { return when (item.itemId) {
R.id.close_history -> { R.id.close_history -> {
close() close()
metrics.track(Event.RecentlyClosedTabsMenuClose) RecentlyClosedTabs.menuClose.record(NoExtras())
true true
} }
R.id.share_history_multi_select -> { R.id.share_history_multi_select -> {
@ -95,9 +93,7 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
metrics = requireComponents.analytics.metrics.also { RecentlyClosedTabs.opened.record(NoExtras())
it.track(Event.RecentlyClosedTabsOpened)
}
} }
override fun onCreateView( override fun onCreateView(
@ -120,7 +116,6 @@ class RecentlyClosedFragment : LibraryPageFragment<RecoverableTab>(), UserIntera
recentlyClosedStore = recentlyClosedFragmentStore, recentlyClosedStore = recentlyClosedFragmentStore,
activity = activity as HomeActivity, activity = activity as HomeActivity,
tabsUseCases = requireComponents.useCases.tabsUseCases, tabsUseCases = requireComponents.useCases.tabsUseCases,
metrics = metrics,
recentlyClosedTabsStorage = requireComponents.core.recentlyClosedTabsStorage.value, recentlyClosedTabsStorage = requireComponents.core.recentlyClosedTabsStorage.value,
lifecycleScope = lifecycleScope, lifecycleScope = lifecycleScope,
openToBrowser = ::openItem openToBrowser = ::openItem

@ -8,7 +8,6 @@ import androidx.navigation.NavController
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
import io.mockk.mockk import io.mockk.mockk
import io.mockk.coEvery import io.mockk.coEvery
import io.mockk.verifyAll
import io.mockk.clearMocks import io.mockk.clearMocks
import io.mockk.every import io.mockk.every
import io.mockk.verify import io.mockk.verify
@ -25,14 +24,19 @@ import mozilla.components.concept.engine.prompt.ShareData
import mozilla.components.feature.recentlyclosed.RecentlyClosedTabsStorage import mozilla.components.feature.recentlyclosed.RecentlyClosedTabsStorage
import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.telemetry.glean.testing.GleanTestRule
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.RecentlyClosedTabs
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.directionsEq import org.mozilla.fenix.ext.directionsEq
import org.mozilla.fenix.ext.optionsEq import org.mozilla.fenix.ext.optionsEq
@ -47,6 +51,9 @@ class DefaultRecentlyClosedControllerTest {
private val tabsUseCases: TabsUseCases = mockk(relaxed = true) private val tabsUseCases: TabsUseCases = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true) private val metrics: MetricController = mockk(relaxed = true)
@get:Rule
val gleanTestRule = GleanTestRule(testContext)
@Before @Before
fun setUp() { fun setUp() {
coEvery { tabsUseCases.restore.invoke(any(), any(), true) } just Runs coEvery { tabsUseCases.restore.invoke(any(), any(), true) } just Runs
@ -93,6 +100,7 @@ class DefaultRecentlyClosedControllerTest {
actualBrowsingModes.add(mode) actualBrowsingModes.add(mode)
} }
) )
assertFalse(RecentlyClosedTabs.menuOpenInNormalTab.testHasValue())
controller.handleOpen(tabs.toSet(), BrowsingMode.Normal) controller.handleOpen(tabs.toSet(), BrowsingMode.Normal)
@ -101,7 +109,8 @@ class DefaultRecentlyClosedControllerTest {
assertEquals(tabs[1].url, tabUrls[1]) assertEquals(tabs[1].url, tabUrls[1])
assertEquals(BrowsingMode.Normal, actualBrowsingModes[0]) assertEquals(BrowsingMode.Normal, actualBrowsingModes[0])
assertEquals(BrowsingMode.Normal, actualBrowsingModes[1]) assertEquals(BrowsingMode.Normal, actualBrowsingModes[1])
verifyAll { metrics.track(Event.RecentlyClosedTabsMenuOpenInNormalTab) } assertTrue(RecentlyClosedTabs.menuOpenInNormalTab.testHasValue())
assertNull(RecentlyClosedTabs.menuOpenInNormalTab.testGetValue().last().extra)
clearMocks(metrics) clearMocks(metrics)
tabUrls.clear() tabUrls.clear()
@ -114,18 +123,23 @@ class DefaultRecentlyClosedControllerTest {
assertEquals(tabs[1].url, tabUrls[1]) assertEquals(tabs[1].url, tabUrls[1])
assertEquals(BrowsingMode.Private, actualBrowsingModes[0]) assertEquals(BrowsingMode.Private, actualBrowsingModes[0])
assertEquals(BrowsingMode.Private, actualBrowsingModes[1]) assertEquals(BrowsingMode.Private, actualBrowsingModes[1])
verifyAll { metrics.track(Event.RecentlyClosedTabsMenuOpenInPrivateTab) } assertTrue(RecentlyClosedTabs.menuOpenInPrivateTab.testHasValue())
assertEquals(1, RecentlyClosedTabs.menuOpenInPrivateTab.testGetValue().size)
assertNull(RecentlyClosedTabs.menuOpenInPrivateTab.testGetValue().single().extra)
} }
@Test @Test
fun `handle selecting first tab`() { fun `handle selecting first tab`() {
val selectedTab = createFakeTab() val selectedTab = createFakeTab()
every { recentlyClosedStore.state.selectedTabs } returns emptySet() every { recentlyClosedStore.state.selectedTabs } returns emptySet()
assertFalse(RecentlyClosedTabs.enterMultiselect.testHasValue())
createController().handleSelect(selectedTab) createController().handleSelect(selectedTab)
verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Select(selectedTab)) } verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Select(selectedTab)) }
verify { metrics.track(Event.RecentlyClosedTabsEnterMultiselect) } assertTrue(RecentlyClosedTabs.enterMultiselect.testHasValue())
assertEquals(1, RecentlyClosedTabs.enterMultiselect.testGetValue().size)
assertNull(RecentlyClosedTabs.enterMultiselect.testGetValue().single().extra)
} }
@Test @Test
@ -136,18 +150,21 @@ class DefaultRecentlyClosedControllerTest {
createController().handleSelect(selectedTab) createController().handleSelect(selectedTab)
verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Select(selectedTab)) } verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Select(selectedTab)) }
verify(exactly = 0) { metrics.track(Event.RecentlyClosedTabsEnterMultiselect) } assertFalse(RecentlyClosedTabs.enterMultiselect.testHasValue())
} }
@Test @Test
fun `handle deselect last tab`() { fun `handle deselect last tab`() {
val deselectedTab = createFakeTab() val deselectedTab = createFakeTab()
every { recentlyClosedStore.state.selectedTabs } returns setOf(deselectedTab) every { recentlyClosedStore.state.selectedTabs } returns setOf(deselectedTab)
assertFalse(RecentlyClosedTabs.exitMultiselect.testHasValue())
createController().handleDeselect(deselectedTab) createController().handleDeselect(deselectedTab)
verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Deselect(deselectedTab)) } verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Deselect(deselectedTab)) }
verify { metrics.track(Event.RecentlyClosedTabsExitMultiselect) } assertTrue(RecentlyClosedTabs.exitMultiselect.testHasValue())
assertEquals(1, RecentlyClosedTabs.exitMultiselect.testGetValue().size)
assertNull(RecentlyClosedTabs.exitMultiselect.testGetValue().single().extra)
} }
@Test @Test
@ -158,24 +175,28 @@ class DefaultRecentlyClosedControllerTest {
createController().handleDeselect(deselectedTab) createController().handleDeselect(deselectedTab)
verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Deselect(deselectedTab)) } verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.Deselect(deselectedTab)) }
verify(exactly = 0) { metrics.track(Event.RecentlyClosedTabsExitMultiselect) } assertFalse(RecentlyClosedTabs.exitMultiselect.testHasValue())
} }
@Test @Test
fun handleDelete() { fun handleDelete() {
val item: TabState = mockk(relaxed = true) val item: TabState = mockk(relaxed = true)
assertFalse(RecentlyClosedTabs.deleteTab.testHasValue())
createController().handleDelete(item) createController().handleDelete(item)
verify { verify {
browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(item)) browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(item))
} }
verify { metrics.track(Event.RecentlyClosedTabsDeleteTab) } assertTrue(RecentlyClosedTabs.deleteTab.testHasValue())
assertEquals(1, RecentlyClosedTabs.deleteTab.testGetValue().size)
assertNull(RecentlyClosedTabs.deleteTab.testGetValue().single().extra)
} }
@Test @Test
fun `delete multiple tabs`() { fun `delete multiple tabs`() {
val tabs = createFakeTabList(2) val tabs = createFakeTabList(2)
assertFalse(RecentlyClosedTabs.menuDelete.testHasValue())
createController().handleDelete(tabs.toSet()) createController().handleDelete(tabs.toSet())
@ -183,11 +204,14 @@ class DefaultRecentlyClosedControllerTest {
browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tabs[0])) browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tabs[0]))
browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tabs[1])) browserStore.dispatch(RecentlyClosedAction.RemoveClosedTabAction(tabs[1]))
} }
verify { metrics.track(Event.RecentlyClosedTabsMenuDelete) } assertTrue(RecentlyClosedTabs.menuDelete.testHasValue())
assertNull(RecentlyClosedTabs.menuDelete.testGetValue().last().extra)
} }
@Test @Test
fun handleNavigateToHistory() { fun handleNavigateToHistory() {
assertFalse(RecentlyClosedTabs.showFullHistory.testHasValue())
createController().handleNavigateToHistory() createController().handleNavigateToHistory()
verify { verify {
@ -198,12 +222,15 @@ class DefaultRecentlyClosedControllerTest {
optionsEq(NavOptions.Builder().setPopUpTo(R.id.historyFragment, true).build()) optionsEq(NavOptions.Builder().setPopUpTo(R.id.historyFragment, true).build())
) )
} }
verify { metrics.track(Event.RecentlyClosedTabsShowFullHistory) } assertTrue(RecentlyClosedTabs.showFullHistory.testHasValue())
assertEquals(1, RecentlyClosedTabs.showFullHistory.testGetValue().size)
assertNull(RecentlyClosedTabs.showFullHistory.testGetValue().single().extra)
} }
@Test @Test
fun `share multiple tabs`() { fun `share multiple tabs`() {
val tabs = createFakeTabList(2) val tabs = createFakeTabList(2)
assertFalse(RecentlyClosedTabs.menuShare.testHasValue())
createController().handleShare(tabs.toSet()) createController().handleShare(tabs.toSet())
@ -216,37 +243,48 @@ class DefaultRecentlyClosedControllerTest {
directionsEq(RecentlyClosedFragmentDirections.actionGlobalShareFragment(data)) directionsEq(RecentlyClosedFragmentDirections.actionGlobalShareFragment(data))
) )
} }
verify { metrics.track(Event.RecentlyClosedTabsMenuShare) } assertTrue(RecentlyClosedTabs.menuShare.testHasValue())
assertEquals(1, RecentlyClosedTabs.menuShare.testGetValue().size)
assertNull(RecentlyClosedTabs.menuShare.testGetValue().single().extra)
} }
@Test @Test
fun handleRestore() = runBlocking { fun handleRestore() = runBlocking {
val item: TabState = mockk(relaxed = true) val item: TabState = mockk(relaxed = true)
assertFalse(RecentlyClosedTabs.openTab.testHasValue())
createController(scope = this).handleRestore(item) createController(scope = this).handleRestore(item)
coVerify { tabsUseCases.restore.invoke(eq(item), any(), true) } coVerify { tabsUseCases.restore.invoke(eq(item), any(), true) }
verify { metrics.track(Event.RecentlyClosedTabsOpenTab) } assertTrue(RecentlyClosedTabs.openTab.testHasValue())
assertEquals(1, RecentlyClosedTabs.openTab.testGetValue().size)
assertNull(RecentlyClosedTabs.openTab.testGetValue().single().extra)
} }
@Test @Test
fun `exist multi-select mode when back is pressed`() { fun `exist multi-select mode when back is pressed`() {
every { recentlyClosedStore.state.selectedTabs } returns createFakeTabList(3).toSet() every { recentlyClosedStore.state.selectedTabs } returns createFakeTabList(3).toSet()
assertFalse(RecentlyClosedTabs.exitMultiselect.testHasValue())
createController().handleBackPressed() createController().handleBackPressed()
verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) } verify { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) }
verifyAll { metrics.track(Event.RecentlyClosedTabsExitMultiselect) } assertTrue(RecentlyClosedTabs.exitMultiselect.testHasValue())
assertEquals(1, RecentlyClosedTabs.exitMultiselect.testGetValue().size)
assertNull(RecentlyClosedTabs.exitMultiselect.testGetValue().single().extra)
} }
@Test @Test
fun `report closing the fragment when back is pressed`() { fun `report closing the fragment when back is pressed`() {
every { recentlyClosedStore.state.selectedTabs } returns emptySet() every { recentlyClosedStore.state.selectedTabs } returns emptySet()
assertFalse(RecentlyClosedTabs.closed.testHasValue())
createController().handleBackPressed() createController().handleBackPressed()
verify(exactly = 0) { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) } verify(exactly = 0) { recentlyClosedStore.dispatch(RecentlyClosedFragmentAction.DeselectAll) }
verifyAll { metrics.track(Event.RecentlyClosedTabsClosed) } assertTrue(RecentlyClosedTabs.closed.testHasValue())
assertEquals(1, RecentlyClosedTabs.closed.testGetValue().size)
assertNull(RecentlyClosedTabs.closed.testGetValue().single().extra)
} }
private fun createController( private fun createController(
@ -260,7 +298,6 @@ class DefaultRecentlyClosedControllerTest {
RecentlyClosedTabsStorage(testContext, mockk(), mockk()), RecentlyClosedTabsStorage(testContext, mockk(), mockk()),
tabsUseCases, tabsUseCases,
activity, activity,
metrics,
scope, scope,
openToBrowser openToBrowser
) )

Loading…
Cancel
Save