Closes #20533: Fix intermittent failures of HistoryControllerTest

This commit is contained in:
Christian Sadilek 2021-07-28 10:54:47 -04:00 committed by mergify[bot]
parent 41f21fc0f8
commit f03f7c6071

View File

@ -41,28 +41,7 @@ class HistoryControllerTest {
private val resources: Resources = mockk(relaxed = true) private val resources: Resources = mockk(relaxed = true)
private val snackbar: FenixSnackbar = mockk(relaxed = true) private val snackbar: FenixSnackbar = mockk(relaxed = true)
private val clipboardManager: ClipboardManager = mockk(relaxed = true) private val clipboardManager: ClipboardManager = mockk(relaxed = true)
private val openInBrowser: (HistoryItem) -> Unit = mockk(relaxed = true)
private val openAndShowTray: (HistoryItem, BrowsingMode) -> Unit = mockk(relaxed = true)
private val displayDeleteAll: () -> Unit = mockk(relaxed = true)
private val invalidateOptionsMenu: () -> Unit = mockk(relaxed = true)
private val deleteHistoryItems: (Set<HistoryItem>) -> Unit = mockk(relaxed = true)
private val syncHistory: suspend () -> Unit = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true) private val metrics: MetricController = mockk(relaxed = true)
private val controller = DefaultHistoryController(
store,
navController,
resources,
snackbar,
clipboardManager,
scope,
openInBrowser,
openAndShowTray,
displayDeleteAll,
invalidateOptionsMenu,
deleteHistoryItems,
syncHistory,
metrics
)
@Before @Before
fun setUp() { fun setUp() {
@ -76,36 +55,45 @@ class HistoryControllerTest {
@Test @Test
fun onPressHistoryItemInNormalMode() { fun onPressHistoryItemInNormalMode() {
var actualHistoryItem: HistoryItem? = null
val controller = createController(openInBrowser = {
actualHistoryItem = it
})
controller.handleOpen(historyItem) controller.handleOpen(historyItem)
assertEquals(historyItem, actualHistoryItem)
verify {
openInBrowser(historyItem)
}
} }
@Test @Test
fun onOpenItemInNormalMode() { fun onOpenItemInNormalMode() {
var actualHistoryItem: HistoryItem? = null
var actualBrowsingMode: BrowsingMode? = null
val controller = createController(openAndShowTray = { historyItem, browsingMode ->
actualHistoryItem = historyItem
actualBrowsingMode = browsingMode
})
controller.handleOpenInNewTab(historyItem, BrowsingMode.Normal) controller.handleOpenInNewTab(historyItem, BrowsingMode.Normal)
assertEquals(historyItem, actualHistoryItem)
verify { assertEquals(BrowsingMode.Normal, actualBrowsingMode)
openAndShowTray(historyItem, BrowsingMode.Normal)
}
} }
@Test @Test
fun onOpenItemInPrivateMode() { fun onOpenItemInPrivateMode() {
var actualHistoryItem: HistoryItem? = null
var actualBrowsingMode: BrowsingMode? = null
val controller = createController(openAndShowTray = { historyItem, browsingMode ->
actualHistoryItem = historyItem
actualBrowsingMode = browsingMode
})
controller.handleOpenInNewTab(historyItem, BrowsingMode.Private) controller.handleOpenInNewTab(historyItem, BrowsingMode.Private)
assertEquals(historyItem, actualHistoryItem)
verify { assertEquals(BrowsingMode.Private, actualBrowsingMode)
openAndShowTray(historyItem, BrowsingMode.Private)
}
} }
@Test @Test
fun onPressHistoryItemInEditMode() { fun onPressHistoryItemInEditMode() {
every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf()) every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf())
controller.handleSelect(historyItem) createController().handleSelect(historyItem)
verify { verify {
store.dispatch(HistoryFragmentAction.AddItemForRemoval(historyItem)) store.dispatch(HistoryFragmentAction.AddItemForRemoval(historyItem))
@ -116,7 +104,7 @@ class HistoryControllerTest {
fun onPressSelectedHistoryItemInEditMode() { fun onPressSelectedHistoryItemInEditMode() {
every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf(historyItem)) every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf(historyItem))
controller.handleDeselect(historyItem) createController().handleDeselect(historyItem)
verify { verify {
store.dispatch(HistoryFragmentAction.RemoveItemForRemoval(historyItem)) store.dispatch(HistoryFragmentAction.RemoveItemForRemoval(historyItem))
@ -127,7 +115,7 @@ class HistoryControllerTest {
fun onSelectHistoryItemDuringSync() { fun onSelectHistoryItemDuringSync() {
every { state.mode } returns HistoryFragmentState.Mode.Syncing every { state.mode } returns HistoryFragmentState.Mode.Syncing
controller.handleSelect(historyItem) createController().handleSelect(historyItem)
verify(exactly = 0) { verify(exactly = 0) {
store.dispatch(HistoryFragmentAction.AddItemForRemoval(historyItem)) store.dispatch(HistoryFragmentAction.AddItemForRemoval(historyItem))
@ -138,14 +126,14 @@ class HistoryControllerTest {
fun onBackPressedInNormalMode() { fun onBackPressedInNormalMode() {
every { state.mode } returns HistoryFragmentState.Mode.Normal every { state.mode } returns HistoryFragmentState.Mode.Normal
assertFalse(controller.handleBackPressed()) assertFalse(createController().handleBackPressed())
} }
@Test @Test
fun onBackPressedInEditMode() { fun onBackPressedInEditMode() {
every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf()) every { state.mode } returns HistoryFragmentState.Mode.Editing(setOf())
assertTrue(controller.handleBackPressed()) assertTrue(createController().handleBackPressed())
verify { verify {
store.dispatch(HistoryFragmentAction.ExitEditMode) store.dispatch(HistoryFragmentAction.ExitEditMode)
} }
@ -153,38 +141,43 @@ class HistoryControllerTest {
@Test @Test
fun onModeSwitched() { fun onModeSwitched() {
controller.handleModeSwitched() var invalidateOptionsMenuInvoked = false
val controller = createController(invalidateOptionsMenu = {
invalidateOptionsMenuInvoked = true
})
verify { controller.handleModeSwitched()
invalidateOptionsMenu.invoke() assertTrue(invalidateOptionsMenuInvoked)
}
} }
@Test @Test
fun onDeleteAll() { fun onDeleteAll() {
controller.handleDeleteAll() var displayDeleteAllInvoked = false
val controller = createController(displayDeleteAll = {
displayDeleteAllInvoked = true
})
verify { controller.handleDeleteAll()
displayDeleteAll.invoke() assertTrue(displayDeleteAllInvoked)
}
} }
@Test @Test
fun onDeleteSome() { fun onDeleteSome() {
val itemsToDelete = setOf(historyItem) val itemsToDelete = setOf(historyItem)
var actualItems: Set<HistoryItem>? = null
val controller = createController(deleteHistoryItems = { items ->
actualItems = items
})
controller.handleDeleteSome(itemsToDelete) controller.handleDeleteSome(itemsToDelete)
assertEquals(itemsToDelete, actualItems)
verify {
deleteHistoryItems(itemsToDelete)
}
} }
@Test @Test
fun onCopyItem() { fun onCopyItem() {
val clipdata = slot<ClipData>() val clipdata = slot<ClipData>()
controller.handleCopyUrl(historyItem) createController().handleCopyUrl(historyItem)
verify { verify {
clipboardManager.setPrimaryClip(capture(clipdata)) clipboardManager.setPrimaryClip(capture(clipdata))
@ -198,7 +191,7 @@ class HistoryControllerTest {
@Test @Test
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun onShareItem() { fun onShareItem() {
controller.handleShare(historyItem) createController().handleShare(historyItem)
verify { verify {
navController.navigate(directionsEq( navController.navigate(directionsEq(
@ -211,16 +204,42 @@ class HistoryControllerTest {
@Test @Test
fun onRequestSync() { fun onRequestSync() {
controller.handleRequestSync() var syncHistoryInvoked = false
createController(syncHistory = {
verify(exactly = 2) { syncHistoryInvoked = true
store.dispatch(any()) }).handleRequestSync()
}
coVerifyOrder { coVerifyOrder {
store.dispatch(HistoryFragmentAction.StartSync) store.dispatch(HistoryFragmentAction.StartSync)
syncHistory.invoke()
store.dispatch(HistoryFragmentAction.FinishSync) store.dispatch(HistoryFragmentAction.FinishSync)
} }
assertTrue(syncHistoryInvoked)
}
@Suppress("LongParameterList")
private fun createController(
openInBrowser: (HistoryItem) -> Unit = { _ -> },
openAndShowTray: (HistoryItem, BrowsingMode) -> Unit = { _, _ -> },
displayDeleteAll: () -> Unit = { },
invalidateOptionsMenu: () -> Unit = { },
deleteHistoryItems: (Set<HistoryItem>) -> Unit = { _ -> },
syncHistory: suspend () -> Unit = { }
): HistoryController {
return DefaultHistoryController(
store,
navController,
resources,
snackbar,
clipboardManager,
scope,
openInBrowser,
openAndShowTray,
displayDeleteAll,
invalidateOptionsMenu,
deleteHistoryItems,
syncHistory,
metrics
)
} }
} }