From eec79dff592ac18454f227ada3435cf6e31f6257 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Wed, 8 Mar 2023 20:11:12 -0500 Subject: [PATCH] Bug 1809998 - Part 4: Refactor OnboardingInteractor from SessionControlInteractor with a standalone default implementation --- .../org/mozilla/fenix/home/HomeFragment.kt | 6 +-- .../SessionControlInteractor.kt | 12 ------ .../interactor/OnboardingInteractor.kt | 21 ++++++++++ .../home/SessionControlInteractorTest.kt | 15 -------- .../interactor/RecentVisitsInteractorTest.kt | 2 - .../DefaultOnboardingInteractorTest.kt | 38 +++++++++++++++++++ 6 files changed, 60 insertions(+), 34 deletions(-) create mode 100644 app/src/test/java/org/mozilla/fenix/onboarding/DefaultOnboardingInteractorTest.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 cfeb037f38..56d56be7a4 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -104,7 +104,6 @@ import org.mozilla.fenix.messaging.DefaultMessageController import org.mozilla.fenix.messaging.FenixNimbusMessagingController import org.mozilla.fenix.messaging.MessagingFeature import org.mozilla.fenix.nimbus.FxNimbus -import org.mozilla.fenix.onboarding.controller.DefaultOnboardingController import org.mozilla.fenix.perf.MarkersFragmentLifecycleCallbacks import org.mozilla.fenix.perf.runBlockingIncrement import org.mozilla.fenix.search.toolbar.DefaultSearchSelectorController @@ -388,10 +387,6 @@ class HomeFragment : Fragment() { appStore = components.appStore, navController = findNavController(), ), - onboardingController = DefaultOnboardingController( - activity = activity, - hideOnboarding = ::hideOnboardingAndOpenSearch, - ), searchSelectorController = DefaultSearchSelectorController( activity = activity, navController = findNavController(), @@ -864,6 +859,7 @@ class HomeFragment : Fragment() { } } + @Suppress("UnusedPrivateMember") private fun hideOnboardingAndOpenSearch() { hideOnboardingIfNeeded() appBarLayout?.setExpanded(true, true) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt index 6f241c114f..14cb0647b3 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt @@ -31,8 +31,6 @@ import org.mozilla.fenix.home.recentvisits.controller.RecentVisitsController import org.mozilla.fenix.home.recentvisits.interactor.RecentVisitsInteractor import org.mozilla.fenix.home.toolbar.ToolbarController import org.mozilla.fenix.home.toolbar.ToolbarInteractor -import org.mozilla.fenix.onboarding.controller.OnboardingController -import org.mozilla.fenix.onboarding.interactor.OnboardingInteractor import org.mozilla.fenix.search.toolbar.SearchSelectorController import org.mozilla.fenix.search.toolbar.SearchSelectorInteractor import org.mozilla.fenix.search.toolbar.SearchSelectorMenu @@ -226,11 +224,9 @@ class SessionControlInteractor( private val recentVisitsController: RecentVisitsController, private val pocketStoriesController: PocketStoriesController, private val privateBrowsingController: PrivateBrowsingController, - private val onboardingController: OnboardingController, private val searchSelectorController: SearchSelectorController, private val toolbarController: ToolbarController, ) : CollectionInteractor, - OnboardingInteractor, TopSiteInteractor, TabSessionInteractor, ToolbarInteractor, @@ -297,14 +293,6 @@ class SessionControlInteractor( controller.handleSponsorPrivacyClicked() } - override fun onStartBrowsingClicked() { - onboardingController.handleStartBrowsingClicked() - } - - override fun onReadPrivacyNoticeClicked() { - onboardingController.handleReadPrivacyNoticeClicked() - } - override fun showWallpapersOnboardingDialog(state: WallpaperState): Boolean { return controller.handleShowWallpapersOnboardingDialog(state) } diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/interactor/OnboardingInteractor.kt b/app/src/main/java/org/mozilla/fenix/onboarding/interactor/OnboardingInteractor.kt index 7a87351e1c..9741c4d756 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/interactor/OnboardingInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/interactor/OnboardingInteractor.kt @@ -4,6 +4,8 @@ package org.mozilla.fenix.onboarding.interactor +import org.mozilla.fenix.onboarding.controller.OnboardingController + /** * Interface for onboarding related actions. */ @@ -18,3 +20,22 @@ interface OnboardingInteractor { */ fun onReadPrivacyNoticeClicked() } + +/** + * The default implementation of [OnboardingInteractor]. + * + * @param controller An instance of [OnboardingController] which will be delegated for all user + * interactions. + */ +class DefaultOnboardingInteractor( + private val controller: OnboardingController, +) : OnboardingInteractor { + + override fun onStartBrowsingClicked() { + controller.handleStartBrowsingClicked() + } + + override fun onReadPrivacyNoticeClicked() { + controller.handleReadPrivacyNoticeClicked() + } +} diff --git a/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt index 76f1ca71fa..33013ff903 100644 --- a/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt @@ -26,7 +26,6 @@ import org.mozilla.fenix.home.recentvisits.controller.RecentVisitsController import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor import org.mozilla.fenix.home.toolbar.ToolbarController -import org.mozilla.fenix.onboarding.controller.OnboardingController import org.mozilla.fenix.search.toolbar.SearchSelectorController class SessionControlInteractorTest { @@ -37,7 +36,6 @@ class SessionControlInteractorTest { private val recentBookmarksController: RecentBookmarksController = mockk(relaxed = true) private val pocketStoriesController: PocketStoriesController = mockk(relaxed = true) private val privateBrowsingController: PrivateBrowsingController = mockk(relaxed = true) - private val onboardingController: OnboardingController = mockk(relaxed = true) private val searchSelectorController: SearchSelectorController = mockk(relaxed = true) private val toolbarController: ToolbarController = mockk(relaxed = true) @@ -56,7 +54,6 @@ class SessionControlInteractorTest { recentVisitsController, pocketStoriesController, privateBrowsingController, - onboardingController, searchSelectorController, toolbarController, ) @@ -118,18 +115,6 @@ class SessionControlInteractorTest { verify { controller.handleRenameCollectionTapped(collection) } } - @Test - fun onStartBrowsingClicked() { - interactor.onStartBrowsingClicked() - verify { onboardingController.handleStartBrowsingClicked() } - } - - @Test - fun onReadPrivacyNoticeClicked() { - interactor.onReadPrivacyNoticeClicked() - verify { onboardingController.handleReadPrivacyNoticeClicked() } - } - @Test fun onToggleCollectionExpanded() { val collection: TabCollection = mockk(relaxed = true) diff --git a/app/src/test/java/org/mozilla/fenix/home/recentvisits/interactor/RecentVisitsInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/home/recentvisits/interactor/RecentVisitsInteractorTest.kt index eab10be6b8..722371c24d 100644 --- a/app/src/test/java/org/mozilla/fenix/home/recentvisits/interactor/RecentVisitsInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/recentvisits/interactor/RecentVisitsInteractorTest.kt @@ -34,7 +34,6 @@ class RecentVisitsInteractorTest { private val recentVisitsController: RecentVisitsController = mockk(relaxed = true) private val pocketStoriesController: PocketStoriesController = mockk(relaxed = true) private val privateBrowsingController: PrivateBrowsingController = mockk(relaxed = true) - private val onboardingController: OnboardingController = mockk(relaxed = true) private val searchSelectorController: SearchSelectorController = mockk(relaxed = true) private val toolbarController: ToolbarController = mockk(relaxed = true) @@ -50,7 +49,6 @@ class RecentVisitsInteractorTest { recentVisitsController, pocketStoriesController, privateBrowsingController, - onboardingController, searchSelectorController, toolbarController, ) diff --git a/app/src/test/java/org/mozilla/fenix/onboarding/DefaultOnboardingInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/onboarding/DefaultOnboardingInteractorTest.kt new file mode 100644 index 0000000000..39970ec5d4 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/onboarding/DefaultOnboardingInteractorTest.kt @@ -0,0 +1,38 @@ +/* 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.onboarding + +import io.mockk.mockk +import io.mockk.verify +import org.junit.Before +import org.junit.Test +import org.mozilla.fenix.onboarding.controller.OnboardingController +import org.mozilla.fenix.onboarding.interactor.DefaultOnboardingInteractor + +class DefaultOnboardingInteractorTest { + + private val controller: OnboardingController = mockk(relaxed = true) + + private lateinit var interactor: DefaultOnboardingInteractor + + @Before + fun setup() { + interactor = DefaultOnboardingInteractor( + controller = controller, + ) + } + + @Test + fun `WHEN the onboarding is finished THEN forward to controller handler`() { + interactor.onStartBrowsingClicked() + verify { controller.handleStartBrowsingClicked() } + } + + @Test + fun `WHEN the privacy notice clicked THEN forward to controller handler`() { + interactor.onReadPrivacyNoticeClicked() + verify { controller.handleReadPrivacyNoticeClicked() } + } +}