[fenix] For https://github.com/mozilla-mobile/fenix/issues/11819 - Show the mic in widget only if setting is enabled
If "Show voice search" is disabled under Settings, the mic icon should not be shown in the search widget.pull/600/head
parent
a210538479
commit
6acdc32aad
@ -0,0 +1,102 @@
|
||||
/* 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.settings.search
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import androidx.preference.CheckBoxPreference
|
||||
import androidx.preference.SwitchPreference
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkObject
|
||||
import io.mockk.spyk
|
||||
import io.mockk.unmockkObject
|
||||
import io.mockk.verify
|
||||
import mozilla.components.support.test.robolectric.testContext
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mozilla.fenix.HomeActivity
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.settings
|
||||
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||
import org.mozilla.gecko.search.SearchWidgetProvider
|
||||
|
||||
@RunWith(FenixRobolectricTestRunner::class)
|
||||
class SearchEngineFragmentTest {
|
||||
@Test
|
||||
fun `GIVEN pref_key_show_voice_search setting WHEN it is modified THEN the value is persisted and widgets updated`() {
|
||||
try {
|
||||
mockkObject(SearchWidgetProvider.Companion)
|
||||
|
||||
val preferences: SharedPreferences = mockk()
|
||||
val preferencesEditor: SharedPreferences.Editor = mockk(relaxed = true)
|
||||
every { testContext.settings().preferences } returns preferences
|
||||
every { preferences.edit() } returns preferencesEditor
|
||||
val fragment = spyk(SearchEngineFragment()) {
|
||||
every { context } returns testContext
|
||||
every { isAdded } returns true
|
||||
every { activity } returns mockk<HomeActivity>(relaxed = true)
|
||||
}
|
||||
val voiceSearchPreferenceKey = testContext.getString(R.string.pref_key_show_voice_search)
|
||||
val voiceSearchPreference = spyk(SwitchPreference(testContext)) {
|
||||
every { key } returns voiceSearchPreferenceKey
|
||||
}
|
||||
// The type needed for "fragment.findPreference" / "fragment.requirePreference" is erased at compile time.
|
||||
// Hence we need individual mocks, specific for each preference's type.
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_show_search_suggestions))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_enable_autocomplete_urls))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<CheckBoxPreference>(testContext.getString(R.string.pref_key_show_search_suggestions_in_private))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_show_search_engine_shortcuts))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_search_browsing_history))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_search_bookmarks))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_search_synced_tabs))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(testContext.getString(R.string.pref_key_show_clipboard_suggestions))
|
||||
} returns mockk(relaxed = true) {
|
||||
every { context } returns testContext
|
||||
}
|
||||
// This preference is the sole purpose of this test
|
||||
every {
|
||||
fragment.findPreference<SwitchPreference>(voiceSearchPreferenceKey)
|
||||
} returns voiceSearchPreference
|
||||
|
||||
// Trigger the preferences setup.
|
||||
fragment.onResume()
|
||||
voiceSearchPreference.callChangeListener(true)
|
||||
|
||||
verify { preferencesEditor.putBoolean(voiceSearchPreferenceKey, true) }
|
||||
verify { SearchWidgetProvider.updateAllWidgets(testContext) }
|
||||
} finally {
|
||||
unmockkObject(SearchWidgetProvider.Companion)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue