|
|
|
@ -17,17 +17,19 @@ import mozilla.components.browser.storage.sync.PlacesHistoryStorage
|
|
|
|
|
import mozilla.components.concept.engine.prompt.ShareData
|
|
|
|
|
import mozilla.components.concept.storage.HistoryMetadataKey
|
|
|
|
|
import mozilla.components.feature.tabs.TabsUseCases
|
|
|
|
|
import mozilla.components.service.glean.testing.GleanTestRule
|
|
|
|
|
import mozilla.components.support.test.robolectric.testContext
|
|
|
|
|
import mozilla.components.support.test.rule.MainCoroutineRule
|
|
|
|
|
import org.junit.After
|
|
|
|
|
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.Rule
|
|
|
|
|
import org.junit.Test
|
|
|
|
|
import org.junit.runner.RunWith
|
|
|
|
|
import org.mozilla.fenix.HomeActivity
|
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
|
import org.mozilla.fenix.components.metrics.MetricController
|
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
|
import org.mozilla.fenix.ext.components
|
|
|
|
|
import org.mozilla.fenix.ext.directionsEq
|
|
|
|
@ -37,10 +39,13 @@ import org.mozilla.fenix.library.history.HistoryItemTimeGroup
|
|
|
|
|
import org.mozilla.fenix.library.historymetadata.HistoryMetadataGroupFragmentAction
|
|
|
|
|
import org.mozilla.fenix.library.historymetadata.HistoryMetadataGroupFragmentDirections
|
|
|
|
|
import org.mozilla.fenix.library.historymetadata.HistoryMetadataGroupFragmentStore
|
|
|
|
|
import org.mozilla.fenix.GleanMetrics.History as GleanHistory
|
|
|
|
|
|
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
|
|
|
class HistoryMetadataGroupControllerTest {
|
|
|
|
|
|
|
|
|
|
@get:Rule
|
|
|
|
|
val gleanTestRule = GleanTestRule(testContext)
|
|
|
|
|
@get:Rule
|
|
|
|
|
val coroutinesTestRule = MainCoroutineRule()
|
|
|
|
|
private val testDispatcher = coroutinesTestRule.testDispatcher
|
|
|
|
@ -50,7 +55,6 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
private val store: HistoryMetadataGroupFragmentStore = mockk(relaxed = true)
|
|
|
|
|
private val browserStore: BrowserStore = mockk(relaxed = true)
|
|
|
|
|
private val selectOrAddUseCase: TabsUseCases.SelectOrAddUseCase = mockk(relaxed = true)
|
|
|
|
|
private val metrics: MetricController = mockk(relaxed = true)
|
|
|
|
|
private val navController: NavController = mockk(relaxed = true)
|
|
|
|
|
private val historyStorage: PlacesHistoryStorage = mockk(relaxed = true)
|
|
|
|
|
|
|
|
|
@ -87,7 +91,6 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
browserStore = browserStore,
|
|
|
|
|
store = store,
|
|
|
|
|
selectOrAddUseCase = selectOrAddUseCase,
|
|
|
|
|
metrics = metrics,
|
|
|
|
|
navController = navController,
|
|
|
|
|
scope = scope,
|
|
|
|
|
searchTerm = "mozilla"
|
|
|
|
@ -104,6 +107,8 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleOpen() {
|
|
|
|
|
assertFalse(GleanHistory.searchTermGroupOpenTab.testHasValue())
|
|
|
|
|
|
|
|
|
|
controller.handleOpen(mozillaHistoryMetadataItem)
|
|
|
|
|
|
|
|
|
|
verify {
|
|
|
|
@ -112,8 +117,16 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
mozillaHistoryMetadataItem.historyMetadataKey
|
|
|
|
|
)
|
|
|
|
|
navController.navigate(R.id.browserFragment)
|
|
|
|
|
metrics.track(Event.HistorySearchTermGroupOpenTab)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(GleanHistory.searchTermGroupOpenTab.testHasValue())
|
|
|
|
|
assertEquals(
|
|
|
|
|
1,
|
|
|
|
|
GleanHistory.searchTermGroupOpenTab.testGetValue().size
|
|
|
|
|
)
|
|
|
|
|
assertNull(
|
|
|
|
|
GleanHistory.searchTermGroupOpenTab.testGetValue()
|
|
|
|
|
.single().extra
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@ -169,13 +182,23 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleDeleteSingle() = testDispatcher.runBlockingTest {
|
|
|
|
|
assertFalse(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
|
|
|
|
|
controller.handleDelete(setOf(mozillaHistoryMetadataItem))
|
|
|
|
|
|
|
|
|
|
coVerify {
|
|
|
|
|
store.dispatch(HistoryMetadataGroupFragmentAction.Delete(mozillaHistoryMetadataItem))
|
|
|
|
|
historyStorage.deleteVisitsFor(mozillaHistoryMetadataItem.url)
|
|
|
|
|
metrics.track(Event.HistorySearchTermGroupRemoveTab)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
assertEquals(
|
|
|
|
|
1,
|
|
|
|
|
GleanHistory.searchTermGroupRemoveTab.testGetValue().size
|
|
|
|
|
)
|
|
|
|
|
assertNull(
|
|
|
|
|
GleanHistory.searchTermGroupRemoveTab.testGetValue()
|
|
|
|
|
.single().extra
|
|
|
|
|
)
|
|
|
|
|
// Here we don't expect the action to be dispatched, because items inside the store
|
|
|
|
|
// we provided by getMetadataItemsList(), but only one item has been removed
|
|
|
|
|
verify(exactly = 0) {
|
|
|
|
@ -187,6 +210,7 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleDeleteMultiple() = testDispatcher.runBlockingTest {
|
|
|
|
|
assertFalse(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
controller.handleDelete(getMetadataItemsList().toSet())
|
|
|
|
|
|
|
|
|
|
coVerify {
|
|
|
|
@ -194,8 +218,12 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
store.dispatch(HistoryMetadataGroupFragmentAction.Delete(it))
|
|
|
|
|
historyStorage.deleteVisitsFor(it.url)
|
|
|
|
|
}
|
|
|
|
|
metrics.track(Event.HistorySearchTermGroupRemoveTab)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
assertNull(
|
|
|
|
|
GleanHistory.searchTermGroupRemoveTab.testGetValue()
|
|
|
|
|
.last().extra
|
|
|
|
|
)
|
|
|
|
|
// Here we expect the action to be dispatched, because both deleted items and items inside
|
|
|
|
|
// the store were provided by the same method getMetadataItemsList()
|
|
|
|
|
verify {
|
|
|
|
@ -214,21 +242,31 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
mozillaHistoryMetadataItem.copy(title = "BBC", url = "https://www.bbc.com/"),
|
|
|
|
|
mozillaHistoryMetadataItem.copy(title = "Stackoverflow", url = "https://stackoverflow.com/")
|
|
|
|
|
)
|
|
|
|
|
assertFalse(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
|
|
|
|
|
controller.handleDelete(abnormalList.toSet())
|
|
|
|
|
coVerify {
|
|
|
|
|
getMetadataItemsList().forEach {
|
|
|
|
|
store.dispatch(HistoryMetadataGroupFragmentAction.Delete(it))
|
|
|
|
|
historyStorage.deleteVisitsFor(it.url)
|
|
|
|
|
}
|
|
|
|
|
metrics.track(Event.HistorySearchTermGroupRemoveTab)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
assertNull(
|
|
|
|
|
GleanHistory.searchTermGroupRemoveTab.testGetValue()
|
|
|
|
|
.last().extra
|
|
|
|
|
)
|
|
|
|
|
coVerify {
|
|
|
|
|
abnormalList.forEach {
|
|
|
|
|
store.dispatch(HistoryMetadataGroupFragmentAction.Delete(it))
|
|
|
|
|
historyStorage.deleteVisitsFor(it.url)
|
|
|
|
|
}
|
|
|
|
|
metrics.track(Event.HistorySearchTermGroupRemoveTab)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(GleanHistory.searchTermGroupRemoveTab.testHasValue())
|
|
|
|
|
assertNull(
|
|
|
|
|
GleanHistory.searchTermGroupRemoveTab.testGetValue()
|
|
|
|
|
.last().extra
|
|
|
|
|
)
|
|
|
|
|
// Here we expect the action to be dispatched, because deleted items include the items
|
|
|
|
|
// provided by getMetadataItemsList(), so that the store becomes empty and the event
|
|
|
|
|
// should be sent
|
|
|
|
@ -241,6 +279,8 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
fun handleDeleteAll() = testDispatcher.runBlockingTest {
|
|
|
|
|
assertFalse(GleanHistory.searchTermGroupRemoveAll.testHasValue())
|
|
|
|
|
|
|
|
|
|
controller.handleDeleteAll()
|
|
|
|
|
|
|
|
|
|
coVerify {
|
|
|
|
@ -251,7 +291,15 @@ class HistoryMetadataGroupControllerTest {
|
|
|
|
|
browserStore.dispatch(
|
|
|
|
|
HistoryMetadataAction.DisbandSearchGroupAction(searchTerm = searchTerm)
|
|
|
|
|
)
|
|
|
|
|
metrics.track(Event.HistorySearchTermGroupRemoveAll)
|
|
|
|
|
}
|
|
|
|
|
assertTrue(GleanHistory.searchTermGroupRemoveAll.testHasValue())
|
|
|
|
|
assertEquals(
|
|
|
|
|
1,
|
|
|
|
|
GleanHistory.searchTermGroupRemoveAll.testGetValue().size
|
|
|
|
|
)
|
|
|
|
|
assertNull(
|
|
|
|
|
GleanHistory.searchTermGroupRemoveAll.testGetValue()
|
|
|
|
|
.single().extra
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|