1
0
Fork 0

For #9336 Check current destination before navigating (#9353)

* For #9336 Check current destination before navigating

* For #9336 Update unit test to check for navigateSafe
master
Mihai Adrian 2020-04-02 01:36:56 +03:00 committed by GitHub
parent 90787cf630
commit 8cd6d7460c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 3 deletions

View File

@ -59,3 +59,12 @@ fun recordIdException(actual: Int?, expected: Int?) {
Sentry.capture("Fragment id $actual did not match expected $expected")
}
}
fun NavController.navigateSafe(
@IdRes resId: Int,
directions: NavDirections
) {
if (currentDestination?.id == resId) {
this.navigate(directions)
}
}

View File

@ -15,6 +15,7 @@ import mozilla.components.browser.session.Session
import mozilla.components.support.ktx.kotlin.isUrl
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.Event.PerformedSearch.SearchAccessPoint.ACTION
import org.mozilla.fenix.components.metrics.Event.PerformedSearch.SearchAccessPoint.NONE
@ -23,6 +24,7 @@ import org.mozilla.fenix.components.metrics.MetricsUtils
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.navigateSafe
import org.mozilla.fenix.ext.settings
/**
@ -159,7 +161,7 @@ class DefaultSearchController(
override fun handleClickSearchEngineSettings() {
val directions = SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment()
navController.navigate(directions)
navController.navigateSafe(R.id.searchFragment, directions)
}
override fun handleExistingSessionSelected(session: Session) {

View File

@ -30,6 +30,7 @@ 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.metrics
import org.mozilla.fenix.ext.navigateSafe
import org.mozilla.fenix.ext.searchEngineManager
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.search.DefaultSearchController.Companion.KEYBOARD_ANIMATION_DELAY
@ -242,7 +243,7 @@ class DefaultSearchControllerTest {
controller.handleClickSearchEngineSettings()
verify { navController.navigate(directions) }
verify { navController.navigateSafe(R.id.searchEngineFragment, directions) }
}
@Test

View File

@ -26,10 +26,12 @@ import org.junit.runner.RunWith
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.FenixApplication
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore.PREF_FILE_SEARCH_ENGINES
import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.navigateSafe
import org.mozilla.fenix.ext.searchEngineManager
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.utils.Settings
@ -271,6 +273,7 @@ class SearchInteractorTest {
val store: SearchFragmentStore = mockk()
every { store.state } returns mockk(relaxed = true)
every { navController.currentDestination?.id } returns R.id.searchFragment
val searchController: SearchController = DefaultSearchController(
mockk(),
@ -286,7 +289,10 @@ class SearchInteractorTest {
interactor.onClickSearchEngineSettings()
verify {
navController.navigate(SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment())
navController.navigateSafe(
R.id.searchFragment,
SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment()
)
}
}