1
0
Fork 0
fenix/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkFragmentInteractorT...

232 lines
6.0 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.library.bookmarks
import io.mockk.mockk
import io.mockk.verify
import io.mockk.verifyOrder
import mozilla.appservices.places.BookmarkRoot
import mozilla.components.concept.storage.BookmarkNode
import mozilla.components.concept.storage.BookmarkNodeType
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
@SuppressWarnings("TooManyFunctions", "LargeClass")
class BookmarkFragmentInteractorTest {
private lateinit var interactor: BookmarkFragmentInteractor
private val bookmarkController: DefaultBookmarkController = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true)
private val item = BookmarkNode(BookmarkNodeType.ITEM, "456", "123", 0, "Mozilla", "http://mozilla.org", null)
private val separator = BookmarkNode(BookmarkNodeType.SEPARATOR, "789", "123", 1, null, null, null)
private val subfolder = BookmarkNode(BookmarkNodeType.FOLDER, "987", "123", 0, "Subfolder", null, listOf())
private val tree: BookmarkNode = BookmarkNode(
BookmarkNodeType.FOLDER, "123", null, 0, "Mobile", null, listOf(item, separator, item, subfolder)
)
private val root = BookmarkNode(
BookmarkNodeType.FOLDER, BookmarkRoot.Root.id, null, 0, BookmarkRoot.Root.name, null, null
)
@Before
fun setup() {
interactor =
BookmarkFragmentInteractor(
bookmarksController = bookmarkController,
metrics = metrics
)
}
@Test
fun `update bookmarks tree`() {
interactor.onBookmarksChanged(tree)
verify {
bookmarkController.handleBookmarkChanged(tree)
}
}
@Test
fun `open a bookmark item`() {
interactor.open(item)
verifyOrder {
bookmarkController.handleBookmarkTapped(item)
metrics.track(Event.OpenedBookmark)
}
}
@Test(expected = IllegalStateException::class)
fun `open a separator`() {
interactor.open(item.copy(type = BookmarkNodeType.SEPARATOR))
}
@Test
fun `expand a level of bookmarks`() {
interactor.open(tree)
verify {
bookmarkController.handleBookmarkExpand(tree)
}
}
@Test
fun `switch between bookmark selection modes`() {
interactor.onSelectionModeSwitch(BookmarkFragmentState.Mode.Normal())
verify {
bookmarkController.handleSelectionModeSwitch()
}
}
@Test
fun `press the edit bookmark button`() {
interactor.onEditPressed(item)
verify {
bookmarkController.handleBookmarkEdit(item)
}
}
@Test
fun `select a bookmark item`() {
interactor.select(item)
verify {
bookmarkController.handleBookmarkSelected(item)
}
}
@Test
fun `deselect a bookmark item`() {
interactor.deselect(item)
verify {
bookmarkController.handleBookmarkDeselected(item)
}
}
@Test
fun `deselectAll bookmark items`() {
interactor.onAllBookmarksDeselected()
verify {
bookmarkController.handleAllBookmarksDeselected()
}
}
@Test
fun `copy a bookmark item`() {
interactor.onCopyPressed(item)
verifyOrder {
bookmarkController.handleCopyUrl(item)
metrics.track(Event.CopyBookmark)
}
}
@Test
fun `share a bookmark item`() {
interactor.onSharePressed(item)
verifyOrder {
bookmarkController.handleBookmarkSharing(item)
metrics.track(Event.ShareBookmark)
}
}
@Test
fun `open a bookmark item in a new tab`() {
interactor.onOpenInNormalTab(item)
verifyOrder {
bookmarkController.handleOpeningBookmark(item, BrowsingMode.Normal)
metrics.track(Event.OpenedBookmarkInNewTab)
}
}
@Test
fun `open a bookmark item in a private tab`() {
interactor.onOpenInPrivateTab(item)
verifyOrder {
bookmarkController.handleOpeningBookmark(item, BrowsingMode.Private)
metrics.track(Event.OpenedBookmarkInPrivateTab)
}
}
@Test
fun `delete a bookmark item`() {
interactor.onDelete(setOf(item))
verify {
bookmarkController.handleBookmarkDeletion(setOf(item), Event.RemoveBookmark)
}
}
@Test(expected = IllegalStateException::class)
fun `delete a separator`() {
interactor.onDelete(setOf(item, item.copy(type = BookmarkNodeType.SEPARATOR)))
}
@Test
fun `delete a bookmark folder`() {
interactor.onDelete(setOf(subfolder))
verify {
bookmarkController.handleBookmarkFolderDeletion(setOf(subfolder))
}
}
@Test
fun `delete multiple bookmarks`() {
interactor.onDelete(setOf(item, subfolder))
verify {
bookmarkController.handleBookmarkDeletion(setOf(item, subfolder), Event.RemoveBookmarks)
}
}
@Test
fun `press the back button`() {
interactor.onBackPressed()
verify {
bookmarkController.handleBackPressed()
}
}
@Test
fun `request a sync`() {
interactor.onRequestSync()
verify {
bookmarkController.handleRequestSync()
}
}
@Test
fun `start swiping an item`() {
interactor.onStartSwipingItem()
verify {
bookmarkController.handleStartSwipingItem()
}
}
@Test
fun `stop swiping an item`() {
interactor.onStopSwipingItem()
verify {
bookmarkController.handleStopSwipingItem()
}
}
}