Bug 1822446 - Add OnboardingController for handling onboarding functionality
parent
72d5c2dd92
commit
f884503a34
@ -0,0 +1,46 @@
|
|||||||
|
/* 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.controller
|
||||||
|
|
||||||
|
import org.mozilla.fenix.HomeActivity
|
||||||
|
import org.mozilla.fenix.onboarding.interactor.OnboardingInteractor
|
||||||
|
import org.mozilla.fenix.settings.SupportUtils
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An interface that handles the view manipulation of the first run onboarding.
|
||||||
|
*/
|
||||||
|
interface OnboardingController {
|
||||||
|
/**
|
||||||
|
* @see [OnboardingInteractor.onStartBrowsingClicked]
|
||||||
|
*/
|
||||||
|
fun handleStartBrowsingClicked()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see [OnboardingInteractor.onReadPrivacyNoticeClicked]
|
||||||
|
*/
|
||||||
|
fun handleReadPrivacyNoticeClicked()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default implementation of [OnboardingController].
|
||||||
|
*/
|
||||||
|
class DefaultOnboardingController(
|
||||||
|
private val activity: HomeActivity,
|
||||||
|
private val hideOnboarding: () -> Unit,
|
||||||
|
) : OnboardingController {
|
||||||
|
|
||||||
|
override fun handleStartBrowsingClicked() {
|
||||||
|
hideOnboarding()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun handleReadPrivacyNoticeClicked() {
|
||||||
|
activity.startActivity(
|
||||||
|
SupportUtils.createCustomTabIntent(
|
||||||
|
activity,
|
||||||
|
SupportUtils.getMozillaPageUrl(SupportUtils.MozillaPage.PRIVATE_NOTICE),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
/* 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.every
|
||||||
|
import io.mockk.mockk
|
||||||
|
import io.mockk.mockkObject
|
||||||
|
import io.mockk.slot
|
||||||
|
import io.mockk.unmockkObject
|
||||||
|
import io.mockk.verify
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Test
|
||||||
|
import org.mozilla.fenix.HomeActivity
|
||||||
|
import org.mozilla.fenix.onboarding.controller.DefaultOnboardingController
|
||||||
|
import org.mozilla.fenix.settings.SupportUtils
|
||||||
|
|
||||||
|
class DefaultOnboardingControllerTest {
|
||||||
|
|
||||||
|
private val activity: HomeActivity = mockk(relaxed = true)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun handleStartBrowsingClicked() {
|
||||||
|
var hideOnboardingInvoked = false
|
||||||
|
createController(hideOnboarding = { hideOnboardingInvoked = true }).handleStartBrowsingClicked()
|
||||||
|
|
||||||
|
assertTrue(hideOnboardingInvoked)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun handleReadPrivacyNoticeClicked() {
|
||||||
|
mockkObject(SupportUtils)
|
||||||
|
val urlCaptor = slot<String>()
|
||||||
|
every { SupportUtils.createCustomTabIntent(any(), capture(urlCaptor)) } returns mockk()
|
||||||
|
|
||||||
|
createController().handleReadPrivacyNoticeClicked()
|
||||||
|
|
||||||
|
verify {
|
||||||
|
activity.startActivity(
|
||||||
|
any(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
assertEquals(
|
||||||
|
SupportUtils.getMozillaPageUrl(SupportUtils.MozillaPage.PRIVATE_NOTICE),
|
||||||
|
urlCaptor.captured,
|
||||||
|
)
|
||||||
|
unmockkObject(SupportUtils)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createController(
|
||||||
|
hideOnboarding: () -> Unit = {},
|
||||||
|
) = DefaultOnboardingController(
|
||||||
|
activity = activity,
|
||||||
|
hideOnboarding = hideOnboarding,
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in New Issue