107 lines
4.1 KiB
Kotlin
107 lines
4.1 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.home
|
|
|
|
import android.content.Context
|
|
import io.mockk.every
|
|
import io.mockk.mockk
|
|
import io.mockk.mockkStatic
|
|
import io.mockk.spyk
|
|
import io.mockk.verify
|
|
import mozilla.components.browser.menu.view.MenuButton
|
|
import mozilla.components.browser.state.state.SearchState
|
|
import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine
|
|
import mozilla.components.feature.top.sites.TopSite
|
|
import org.junit.Assert.assertEquals
|
|
import org.junit.Assert.assertFalse
|
|
import org.junit.Assert.assertNotNull
|
|
import org.junit.Assert.assertTrue
|
|
import org.junit.Before
|
|
import org.junit.Test
|
|
import org.mozilla.fenix.FenixApplication
|
|
import org.mozilla.fenix.components.Core
|
|
import org.mozilla.fenix.ext.application
|
|
import org.mozilla.fenix.ext.components
|
|
import org.mozilla.fenix.home.HomeFragment.Companion.AMAZON_SPONSORED_TITLE
|
|
import org.mozilla.fenix.home.HomeFragment.Companion.EBAY_SPONSORED_TITLE
|
|
import org.mozilla.fenix.utils.Settings
|
|
|
|
class HomeFragmentTest {
|
|
|
|
private lateinit var settings: Settings
|
|
private lateinit var context: Context
|
|
private lateinit var core: Core
|
|
private lateinit var homeFragment: HomeFragment
|
|
|
|
@Before
|
|
fun setup() {
|
|
settings = mockk(relaxed = true)
|
|
context = mockk(relaxed = true)
|
|
core = mockk(relaxed = true)
|
|
|
|
val fenixApplication: FenixApplication = mockk(relaxed = true)
|
|
|
|
homeFragment = spyk(HomeFragment())
|
|
|
|
every { context.application } returns fenixApplication
|
|
every { homeFragment.context } answers { context }
|
|
every { context.components.settings } answers { settings }
|
|
every { context.components.core } answers { core }
|
|
}
|
|
|
|
@Test
|
|
fun `WHEN getTopSitesConfig is called THEN it returns TopSitesConfig with non-null frecencyConfig`() {
|
|
every { settings.topSitesMaxLimit } returns 10
|
|
|
|
val topSitesConfig = homeFragment.getTopSitesConfig()
|
|
|
|
assertNotNull(topSitesConfig.frecencyConfig)
|
|
}
|
|
|
|
@Test
|
|
fun `GIVEN a topSitesMaxLimit WHEN getTopSitesConfig is called THEN it returns TopSitesConfig with totalSites = topSitesMaxLimit`() {
|
|
val topSitesMaxLimit = 10
|
|
every { settings.topSitesMaxLimit } returns topSitesMaxLimit
|
|
|
|
val topSitesConfig = homeFragment.getTopSitesConfig()
|
|
|
|
assertEquals(topSitesMaxLimit, topSitesConfig.totalSites)
|
|
}
|
|
|
|
@Test
|
|
fun `GIVEN the selected search engine is set to eBay WHEN getTopSitesConfig is called THEN providerFilter filters the eBay provided top sites`() {
|
|
mockkStatic("mozilla.components.browser.state.state.SearchStateKt")
|
|
every { core.store } returns mockk() {
|
|
every { state } returns mockk() {
|
|
every { search } returns mockk()
|
|
}
|
|
}
|
|
every { any<SearchState>().selectedOrDefaultSearchEngine } returns mockk {
|
|
every { name } returns EBAY_SPONSORED_TITLE
|
|
}
|
|
val eBayTopSite = TopSite.Provided(1L, EBAY_SPONSORED_TITLE, "eBay.com", "", "", "", 0L)
|
|
val amazonTopSite = TopSite.Provided(2L, AMAZON_SPONSORED_TITLE, "Amazon.com", "", "", "", 0L)
|
|
val firefoxTopSite = TopSite.Provided(3L, "Firefox", "mozilla.org", "", "", "", 0L)
|
|
val providedTopSites = listOf(eBayTopSite, amazonTopSite, firefoxTopSite)
|
|
|
|
val topSitesConfig = homeFragment.getTopSitesConfig()
|
|
|
|
val filteredProvidedSites = providedTopSites.filter {
|
|
topSitesConfig.providerConfig?.providerFilter?.invoke(it) ?: true
|
|
}
|
|
assertTrue(filteredProvidedSites.containsAll(listOf(amazonTopSite, firefoxTopSite)))
|
|
assertFalse(filteredProvidedSites.contains(eBayTopSite))
|
|
}
|
|
|
|
@Test
|
|
fun `WHEN configuration changed menu is dismissed`() {
|
|
val menuButton: MenuButton = mockk(relaxed = true)
|
|
homeFragment.getMenuButton = { menuButton }
|
|
homeFragment.onConfigurationChanged(mockk(relaxed = true))
|
|
|
|
verify(exactly = 1) { menuButton.dismissMenu() }
|
|
}
|
|
}
|