1
0
Fork 0
fenix/app/src/test/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessorTest.kt

161 lines
5.5 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.intent
import android.content.Intent
import androidx.core.net.toUri
import androidx.navigation.NavController
import io.mockk.Called
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.ext.components
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
@RunWith(RobolectricTestRunner::class)
@Config(application = TestApplication::class)
class DeepLinkIntentProcessorTest {
private lateinit var activity: HomeActivity
private lateinit var navController: NavController
private lateinit var out: Intent
private lateinit var processor: DeepLinkIntentProcessor
@Before
fun setup() {
activity = mockk(relaxed = true)
navController = mockk(relaxed = true)
out = mockk()
processor = DeepLinkIntentProcessor(activity)
}
@Test
fun `do not process blank intents`() {
assertFalse(processor.process(Intent(), navController, out))
verify { activity wasNot Called }
verify { navController wasNot Called }
verify { out wasNot Called }
}
@Test
fun `return true if scheme is fenix`() {
assertTrue(processor.process(testIntent("fenix://test"), navController, out))
verify { activity wasNot Called }
verify { navController wasNot Called }
verify { out wasNot Called }
}
@Test
fun `process home deep link`() {
assertTrue(processor.process(testIntent("fenix://home"), navController, out))
verify { activity wasNot Called }
verify { navController.navigate(NavGraphDirections.actionGlobalHomeFragment()) }
verify { out wasNot Called }
}
@Test
fun `process settings deep link`() {
assertTrue(processor.process(testIntent("fenix://settings"), navController, out))
verify { activity wasNot Called }
verify { navController.navigate(NavGraphDirections.actionGlobalSettingsFragment()) }
verify { out wasNot Called }
}
@Test
fun `process turn_on_sync deep link`() {
assertTrue(processor.process(testIntent("fenix://turn_on_sync"), navController, out))
verify { activity wasNot Called }
verify { navController.navigate(NavGraphDirections.actionGlobalTurnOnSync()) }
verify { out wasNot Called }
}
@Test
fun `process settings_search_engine deep link`() {
assertTrue(processor.process(testIntent("fenix://settings_search_engine"), navController, out))
verify { activity wasNot Called }
verify { navController.navigate(NavGraphDirections.actionGlobalSearchEngineFragment()) }
verify { out wasNot Called }
}
@Test
fun `process settings_accessibility deep link`() {
assertTrue(processor.process(testIntent("fenix://settings_accessibility"), navController, out))
verify { activity wasNot Called }
verify { navController.navigate(NavGraphDirections.actionGlobalAccessibilityFragment()) }
verify { out wasNot Called }
}
@Test
fun `process settings_delete_browsing_data deep link`() {
assertTrue(processor.process(testIntent("fenix://settings_delete_browsing_data"), navController, out))
verify { activity wasNot Called }
verify { navController.navigate(NavGraphDirections.actionGlobalDeleteBrowsingDataFragment()) }
verify { out wasNot Called }
}
@Test
fun `process enable_private_browsing deep link`() {
val browsingModeManager: DefaultBrowsingModeManager = mockk(relaxed = true)
every { activity.components.browsingModeManager } returns browsingModeManager
assertTrue(processor.process(testIntent("fenix://enable_private_browsing"), navController, out))
verify { browsingModeManager.mode = BrowsingMode.Private }
verify { navController.navigate(NavGraphDirections.actionGlobalHomeFragment()) }
verify { out wasNot Called }
}
@Test
fun `process open deep link`() {
assertTrue(processor.process(testIntent("fenix://open"), navController, out))
verify { activity wasNot Called }
verify { navController wasNot Called }
verify { out wasNot Called }
assertTrue(processor.process(testIntent("fenix://open?url=test"), navController, out))
verify {
activity.openToBrowserAndLoad(
"test",
newTab = true,
from = BrowserDirection.FromGlobal
)
}
verify { navController wasNot Called }
verify { out wasNot Called }
}
@Test
fun `process make_default_browser deep link`() {
assertTrue(processor.process(testIntent("fenix://make_default_browser"), navController, out))
verify { navController wasNot Called }
verify { out wasNot Called }
}
private fun testIntent(uri: String) = Intent("", uri.toUri())
}