fenix/app/src/test/java/org/mozilla/fenix/tabstray/browser/BrowserTabsAdapterTest.kt

99 lines
3.7 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.tabstray.browser
import android.view.LayoutInflater
import io.mockk.every
import io.mockk.mockk
import io.mockk.spyk
import io.mockk.verify
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.state.state.createTab
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.browser.tabstray.TabsAdapter.Companion.PAYLOAD_DONT_HIGHLIGHT_SELECTED_ITEM
import mozilla.components.browser.tabstray.TabsAdapter.Companion.PAYLOAD_HIGHLIGHT_SELECTED_ITEM
import mozilla.components.support.test.robolectric.testContext
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.databinding.TabTrayItemBinding
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.selection.SelectionHolder
import org.mozilla.fenix.tabstray.TabsTrayStore
@RunWith(FenixRobolectricTestRunner::class)
class BrowserTabsAdapterTest {
private val context = testContext
private val interactor = mockk<BrowserTrayInteractor>(relaxed = true)
private val store = TabsTrayStore()
@Test
fun `WHEN bind with payloads is called THEN update the holder`() {
every { testContext.components.core.thumbnailStorage } returns mockk()
val adapter = BrowserTabsAdapter(context, interactor, store, "Test", mockk())
val holder = mockk<AbstractBrowserTabViewHolder>(relaxed = true)
adapter.updateTabs(
listOf(
createTab(url = "url", id = "tab1"),
),
null,
selectedTabId = "tab1",
)
adapter.onBindViewHolder(holder, 0, listOf(PAYLOAD_HIGHLIGHT_SELECTED_ITEM))
verify { holder.updateSelectedTabIndicator(true) }
adapter.onBindViewHolder(holder, 0, listOf(PAYLOAD_DONT_HIGHLIGHT_SELECTED_ITEM))
verify { holder.updateSelectedTabIndicator(false) }
}
@Test
fun `WHEN the selection holder is set THEN update the selected tab`() {
every { testContext.components.core.thumbnailStorage } returns mockk()
every { testContext.components.core.store } returns BrowserStore()
every { testContext.components.analytics } returns mockk(relaxed = true)
every { testContext.components.settings } returns mockk(relaxed = true)
val adapter = BrowserTabsAdapter(context, interactor, store, "Test", mockk())
val binding = TabTrayItemBinding.inflate(LayoutInflater.from(testContext))
val holder = spyk(
BrowserTabViewHolder.ListViewHolder(
imageLoader = mockk(),
browserTrayInteractor = interactor,
store = store,
selectionHolder = null,
itemView = binding.root,
featureName = "Test",
),
)
val tab = createTab(url = "url", id = "tab1")
every { holder.tab }.answers { tab }
testSelectionHolder.internalState.add(tab)
adapter.selectionHolder = testSelectionHolder
adapter.updateTabs(
listOf(tab),
null,
selectedTabId = "tab1",
)
adapter.onBindViewHolder(holder, 0, listOf(PAYLOAD_DONT_HIGHLIGHT_SELECTED_ITEM))
verify { holder.showTabIsMultiSelectEnabled(any(), true) }
}
private val testSelectionHolder = object : SelectionHolder<TabSessionState> {
override val selectedItems: Set<TabSessionState>
get() = internalState
val internalState = mutableSetOf<TabSessionState>()
}
}