From 8993a0acb28a03ee810fff42d6357ff2929417e5 Mon Sep 17 00:00:00 2001 From: Mihai Adrian Carare <48995920+mcarare@users.noreply.github.com> Date: Wed, 27 Jan 2021 23:54:48 +0200 Subject: [PATCH] For #17655: Do not pass threshold if showTopFrecentSites is false. (#17657) * For #17655: Do not pass threshold if showTopFrecentSites is false. * For #17655: Add unit tests for getTopSitesConfig. --- .../org/mozilla/fenix/home/HomeFragment.kt | 9 ++- .../mozilla/fenix/home/HomeFragmentTest.kt | 68 +++++++++++++++++++ 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 6c3b2160d..65ed19cfe 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -21,6 +21,7 @@ import android.view.accessibility.AccessibilityEvent import android.widget.Button import android.widget.LinearLayout import android.widget.PopupWindow +import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog import androidx.appcompat.content.res.AppCompatResources import androidx.constraintlayout.widget.ConstraintLayout @@ -273,11 +274,12 @@ class HomeFragment : Fragment() { * Returns a [TopSitesConfig] which specifies how many top sites to display and whether or * not frequently visited sites should be displayed. */ - private fun getTopSitesConfig(): TopSitesConfig { + @VisibleForTesting + internal fun getTopSitesConfig(): TopSitesConfig { val settings = requireContext().settings() return TopSitesConfig( settings.topSitesMaxLimit, - FrecencyThresholdOption.SKIP_ONE_TIME_PAGES + if (settings.showTopFrecentSites) FrecencyThresholdOption.SKIP_ONE_TIME_PAGES else null ) } @@ -428,7 +430,8 @@ class HomeFragment : Fragment() { if (searchEngine != null) { val iconSize = requireContext().resources.getDimensionPixelSize(R.dimen.preference_icon_drawable_size) - val searchIcon = BitmapDrawable(requireContext().resources, searchEngine.icon) + val searchIcon = + BitmapDrawable(requireContext().resources, searchEngine.icon) searchIcon.setBounds(0, 0, iconSize, iconSize) search_engine_icon?.setImageDrawable(searchIcon) } else { diff --git a/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt new file mode 100644 index 000000000..8f24fa8e8 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/home/HomeFragmentTest.kt @@ -0,0 +1,68 @@ +/* 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.spyk +import kotlinx.coroutines.ExperimentalCoroutinesApi +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings + +@ExperimentalCoroutinesApi +@RunWith(FenixRobolectricTestRunner::class) +class HomeFragmentTest { + + private lateinit var settings: Settings + private lateinit var context: Context + private lateinit var homeFragment: HomeFragment + + @Before + fun setup() { + context = mockk(relaxed = true) + settings = mockk(relaxed = true) + + homeFragment = spyk(HomeFragment()) + + every { homeFragment.context } returns context + every { context.settings() } returns settings + } + + @Test + fun `GIVEN showTopFrecentSites is false WHEN getTopSitesConfig is called THEN it returns TopSitesConfig with null frecencyConfig`() { + every { settings.showTopFrecentSites } returns false + every { settings.topSitesMaxLimit } returns 10 + + val topSitesConfig = homeFragment.getTopSitesConfig() + + Assert.assertNull(topSitesConfig.frecencyConfig) + } + + @Test + fun `GIVEN showTopFrecentSites is true WHEN getTopSitesConfig is called THEN it returns TopSitesConfig with non-null frecencyConfig`() { + every { context.settings().showTopFrecentSites } returns true + every { settings.topSitesMaxLimit } returns 10 + + val topSitesConfig = homeFragment.getTopSitesConfig() + + Assert.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() + + Assert.assertEquals(topSitesMaxLimit, topSitesConfig.totalSites) + } +}