diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt index 766246f14..61f19e67f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt @@ -127,7 +127,7 @@ class ReaderViewTest { }.close { } readerViewRobot { - verifyReaderViewDetected(true) + verifyReaderViewDetected(false) } } diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt index bd0c92a02..dd33672eb 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserInteractorTest.kt @@ -54,4 +54,13 @@ class BrowserInteractorTest { verify { browserToolbarController.handleToolbarItemInteraction(item) } } + + @Test + fun onBrowserMenuDismissed() { + val itemList: List = listOf() + + interactor.onBrowserMenuDismissed(itemList) + + verify { browserToolbarController.handleBrowserMenuDismissed(itemList) } + } } diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt index 6c3965bb8..f00fc2bc3 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt @@ -34,10 +34,13 @@ import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tabs.TabsUseCases import org.junit.After +import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.TestApplication import org.mozilla.fenix.browser.BrowserAnimator import org.mozilla.fenix.browser.BrowserFragment import org.mozilla.fenix.browser.BrowserFragmentDirections @@ -51,12 +54,17 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.nav +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.toTab import org.mozilla.fenix.home.Tab import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config @ExperimentalCoroutinesApi @UseExperimental(ObsoleteCoroutinesApi::class) +@RunWith(RobolectricTestRunner::class) +@Config(application = TestApplication::class) class DefaultBrowserToolbarControllerTest { private val mainThreadSurrogate = newSingleThreadContext("UI thread") @@ -126,6 +134,12 @@ class DefaultBrowserToolbarControllerTest { every { browserAnimator.captureEngineViewAndDrawStatically(capture(onComplete)) } answers { onComplete.captured.invoke() } } + @After + fun tearDown() { + Dispatchers.resetMain() // reset main dispatcher to the original Main dispatcher + mainThreadSurrogate.close() + } + @Test fun handleBrowserToolbarPaste() { every { currentSession.id } returns "1" @@ -164,10 +178,41 @@ class DefaultBrowserToolbarControllerTest { } } - @After - fun tearDown() { - Dispatchers.resetMain() // reset main dispatcher to the original Main dispatcher - mainThreadSurrogate.close() + @Test + fun `handle BrowserMenu dismissed with all options available`() = runBlockingTest { + val itemList: List = listOf( + ToolbarMenu.Item.AddToHomeScreen, + ToolbarMenu.Item.ReaderMode(true), + ToolbarMenu.Item.OpenInApp + ) + + val activity = HomeActivity() + + controller = DefaultBrowserToolbarController( + activity = activity, + navController = navController, + browsingModeManager = browsingModeManager, + findInPageLauncher = findInPageLauncher, + engineView = engineView, + browserAnimator = browserAnimator, + customTabSession = null, + getSupportUrl = getSupportUrl, + openInFenixIntent = openInFenixIntent, + scope = this, + swipeRefresh = swipeRefreshLayout, + tabCollectionStorage = tabCollectionStorage, + topSiteStorage = topSiteStorage, + bookmarkTapped = mockk(), + readerModeController = mockk(), + sessionManager = mockk(), + store = mockk() + ) + + controller.handleBrowserMenuDismissed(itemList) + + assertEquals(true, activity.settings().installPwaOpened) + assertEquals(true, activity.settings().readerModeOpened) + assertEquals(true, activity.settings().openInAppOpened) } @Test diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenuTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenuTest.kt new file mode 100644 index 000000000..14b064237 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenuTest.kt @@ -0,0 +1,129 @@ +package org.mozilla.fenix.components.toolbar + +import android.content.Context +import androidx.lifecycle.LifecycleOwner +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkStatic +import io.mockk.spyk +import mozilla.components.browser.session.Session +import mozilla.components.browser.session.SessionManager +import mozilla.components.concept.storage.BookmarksStorage +import mozilla.components.feature.app.links.AppLinkRedirect +import mozilla.components.feature.app.links.AppLinksUseCases +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.utils.Settings + +class DefaultToolbarMenuTest { + + private lateinit var defaultToolbarMenu: DefaultToolbarMenu + + private val context: Context = mockk(relaxed = true) + private val sessionManager: SessionManager = mockk(relaxed = true) + private val onItemTapped: (ToolbarMenu.Item) -> Unit = {} + private val lifecycleOwner: LifecycleOwner = mockk(relaxed = true) + private val bookmarksStorage: BookmarksStorage = mockk(relaxed = true) + + @Before + fun setUp() { + defaultToolbarMenu = spyk( + DefaultToolbarMenu( + context, + sessionManager, + hasAccountProblem = false, + shouldReverseItems = false, + onItemTapped = onItemTapped, + lifecycleOwner = lifecycleOwner, + bookmarksStorage = bookmarksStorage + ) + ) + + val settings = Settings.getInstance(context, true) + mockkStatic("org.mozilla.fenix.ext.ContextKt") + every { context.settings() } returns settings + } + + @Test + fun `get all low prio highlight items`() { + every { context.components.useCases.webAppUseCases.isPinningSupported() } returns true + every { context.components.useCases.webAppUseCases.isInstallable() } returns true + + val getAppLinkRedirect: AppLinksUseCases.GetAppLinkRedirect = mockk(relaxed = true) + every { context.components.useCases.appLinksUseCases.appLinkRedirect } returns getAppLinkRedirect + val appLinkRedirect: AppLinkRedirect = mockk(relaxed = true) + every { appLinkRedirect.hasExternalApp() } returns true + every { getAppLinkRedirect(any()) } returns appLinkRedirect + + val session: Session = mockk(relaxed = true) + every { session.readerable } returns true + every { sessionManager.selectedSession } returns session + + val list = defaultToolbarMenu.getLowPrioHighlightItems() + + assertEquals(ToolbarMenu.Item.AddToHomeScreen, list[0]) + assertEquals(ToolbarMenu.Item.ReaderMode(false), list[1]) + assertEquals(ToolbarMenu.Item.OpenInApp, list[2]) + } + + @Test + fun `get all low prio highlight items without AddToHomeScreen`() { + val settings = Settings.getInstance(context, true) + mockkStatic("org.mozilla.fenix.ext.ContextKt") + every { context.settings() } returns settings + + every { context.components.useCases.webAppUseCases.isPinningSupported() } returns false + + val getAppLinkRedirect: AppLinksUseCases.GetAppLinkRedirect = mockk(relaxed = true) + every { context.components.useCases.appLinksUseCases.appLinkRedirect } returns getAppLinkRedirect + val appLinkRedirect: AppLinkRedirect = mockk(relaxed = true) + every { appLinkRedirect.hasExternalApp() } returns true + every { getAppLinkRedirect(any()) } returns appLinkRedirect + + val session: Session = mockk(relaxed = true) + every { session.readerable } returns true + every { sessionManager.selectedSession } returns session + + val list = defaultToolbarMenu.getLowPrioHighlightItems() + + assertEquals(ToolbarMenu.Item.ReaderMode(false), list[0]) + assertEquals(ToolbarMenu.Item.OpenInApp, list[1]) + } + + @Test + fun `get all low prio highlight items without ReaderMode`() { + every { context.components.useCases.webAppUseCases.isPinningSupported() } returns true + every { context.components.useCases.webAppUseCases.isInstallable() } returns true + + val getAppLinkRedirect: AppLinksUseCases.GetAppLinkRedirect = mockk(relaxed = true) + every { context.components.useCases.appLinksUseCases.appLinkRedirect } returns getAppLinkRedirect + every { getAppLinkRedirect(any()).hasExternalApp() } returns true + + val list = defaultToolbarMenu.getLowPrioHighlightItems() + + assertEquals(ToolbarMenu.Item.AddToHomeScreen, list[0]) + assertEquals(ToolbarMenu.Item.OpenInApp, list[1]) + } + + @Test + fun `get all low prio highlight items without OpenInApp`() { + every { context.components.useCases.webAppUseCases.isPinningSupported() } returns true + every { context.components.useCases.webAppUseCases.isInstallable() } returns true + + val session: Session = mockk(relaxed = true) + every { session.readerable } returns true + every { sessionManager.selectedSession } returns session + + val getAppLinkRedirect: AppLinksUseCases.GetAppLinkRedirect = mockk(relaxed = true) + every { context.components.useCases.appLinksUseCases.appLinkRedirect } returns getAppLinkRedirect + every { getAppLinkRedirect(any()).hasExternalApp() } returns false + + val list = defaultToolbarMenu.getLowPrioHighlightItems() + + assertEquals(ToolbarMenu.Item.AddToHomeScreen, list[0]) + assertEquals(ToolbarMenu.Item.ReaderMode(false), list[1]) + } +} diff --git a/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt b/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt index dfdac902f..09520d2e1 100644 --- a/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt +++ b/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt @@ -294,6 +294,45 @@ class SettingsTest { assertFalse(settings.shouldUseTrackingProtection) } + @Test + fun shouldSetReaderModeOpened() { + // When + // Then + assertFalse(settings.readerModeOpened) + + // When + settings.readerModeOpened = true + + // Then + assertTrue(settings.readerModeOpened) + } + + @Test + fun shouldSetOpenInAppOpened() { + // When + // Then + assertFalse(settings.openInAppOpened) + + // When + settings.openInAppOpened = true + + // Then + assertTrue(settings.openInAppOpened) + } + + @Test + fun shouldSetInstallPwaOpened() { + // When + // Then + assertFalse(settings.installPwaOpened) + + // When + settings.installPwaOpened = true + + // Then + assertTrue(settings.installPwaOpened) + } + @Test fun shouldUseTrackingProtectionStrict() { // When