No issue: tests installedSearchEngineIdentifiers
parent
d3ff98816d
commit
2aa80eff95
|
@ -25,10 +25,12 @@ import java.util.Locale
|
||||||
open class FenixSearchEngineProvider(
|
open class FenixSearchEngineProvider(
|
||||||
private val context: Context
|
private val context: Context
|
||||||
) : SearchEngineProvider, CoroutineScope by CoroutineScope(Job() + Dispatchers.IO) {
|
) : SearchEngineProvider, CoroutineScope by CoroutineScope(Job() + Dispatchers.IO) {
|
||||||
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||||
open val baseSearchEngines = async {
|
open val baseSearchEngines = async {
|
||||||
AssetsSearchEngineProvider(LocaleSearchLocalizationProvider()).loadSearchEngines(context)
|
AssetsSearchEngineProvider(LocaleSearchLocalizationProvider()).loadSearchEngines(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||||
open val bundledSearchEngines = async {
|
open val bundledSearchEngines = async {
|
||||||
val defaultEngineIdentifiers = baseSearchEngines.await().list.map { it.identifier }.toSet()
|
val defaultEngineIdentifiers = baseSearchEngines.await().list.map { it.identifier }.toSet()
|
||||||
AssetsSearchEngineProvider(
|
AssetsSearchEngineProvider(
|
||||||
|
@ -43,6 +45,7 @@ open class FenixSearchEngineProvider(
|
||||||
).loadSearchEngines(context)
|
).loadSearchEngines(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||||
open var customSearchEngines = async {
|
open var customSearchEngines = async {
|
||||||
CustomSearchEngineProvider().loadSearchEngines(context)
|
CustomSearchEngineProvider().loadSearchEngines(context)
|
||||||
}
|
}
|
||||||
|
@ -133,7 +136,8 @@ open class FenixSearchEngineProvider(
|
||||||
Context.MODE_PRIVATE
|
Context.MODE_PRIVATE
|
||||||
)
|
)
|
||||||
|
|
||||||
private suspend fun installedSearchEngineIdentifiers(context: Context): Set<String> {
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||||
|
suspend fun installedSearchEngineIdentifiers(context: Context): Set<String> {
|
||||||
val prefs = prefs(context)
|
val prefs = prefs(context)
|
||||||
|
|
||||||
val identifiers = if (!prefs.contains(INSTALLED_ENGINES_KEY)) {
|
val identifiers = if (!prefs.contains(INSTALLED_ENGINES_KEY)) {
|
||||||
|
@ -154,8 +158,8 @@ open class FenixSearchEngineProvider(
|
||||||
|
|
||||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||||
companion object {
|
companion object {
|
||||||
private val BUNDLED_SEARCH_ENGINES = listOf("ecosia", "reddit", "startpage", "yahoo", "youtube")
|
val BUNDLED_SEARCH_ENGINES = listOf("ecosia", "reddit", "startpage", "yahoo", "youtube")
|
||||||
const val PREF_FILE = "fenix-search-engine-provider"
|
const val PREF_FILE = "fenix-search-engine-provider"
|
||||||
private const val INSTALLED_ENGINES_KEY = "fenix-installed-search-engines"
|
const val INSTALLED_ENGINES_KEY = "fenix-installed-search-engines"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,36 +1,44 @@
|
||||||
package org.mozilla.fenix.components.searchengine
|
package org.mozilla.fenix.components.searchengine
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
|
import io.mockk.mockkStatic
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import kotlinx.coroutines.Deferred
|
import kotlinx.coroutines.Deferred
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.runBlockingTest
|
import kotlinx.coroutines.test.runBlockingTest
|
||||||
import mozilla.components.browser.search.SearchEngine
|
import mozilla.components.browser.search.SearchEngine
|
||||||
import mozilla.components.browser.search.provider.SearchEngineList
|
import mozilla.components.browser.search.provider.SearchEngineList
|
||||||
|
import mozilla.components.support.test.robolectric.testContext
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Mockito
|
import org.mockito.Mockito
|
||||||
import org.mockito.Mockito.`when`
|
import org.mockito.Mockito.`when`
|
||||||
import org.mockito.Mockito.mock
|
import org.mockito.Mockito.mock
|
||||||
|
import org.mozilla.fenix.TestApplication
|
||||||
|
import org.mozilla.fenix.components.searchengine.FenixSearchEngineProvider.Companion.INSTALLED_ENGINES_KEY
|
||||||
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@ExperimentalCoroutinesApi
|
@ExperimentalCoroutinesApi
|
||||||
|
@RunWith(RobolectricTestRunner::class)
|
||||||
|
@Config(application = TestApplication::class)
|
||||||
class FenixSearchEngineProviderTest {
|
class FenixSearchEngineProviderTest {
|
||||||
|
|
||||||
private val testContext = mockk<Context>()
|
// private val testContext = mockk<Context>()
|
||||||
|
|
||||||
private lateinit var fenixSearchEngineProvider: FenixSearchEngineProvider
|
private lateinit var fenixSearchEngineProvider: FenixSearchEngineProvider
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun before() {
|
fun before() {
|
||||||
|
// mockSharedPreferences(installedEngines = null)
|
||||||
fenixSearchEngineProvider = FakeFenixSearchEngineProvider(testContext)
|
fenixSearchEngineProvider = FakeFenixSearchEngineProvider(testContext)
|
||||||
|
|
||||||
every {
|
|
||||||
testContext.getSharedPreferences(FenixSearchEngineProvider.PREF_FILE, Context.MODE_PRIVATE)
|
|
||||||
} returns mockk(relaxed = true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -42,18 +50,36 @@ class FenixSearchEngineProviderTest {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `temp test class inits`() = runBlockingTest {
|
fun `GIVEN sharedprefs does not ontain installed engines WHEN installedSearchEngineIdentifiers THEN defaultEngines + customEngines ids are returned`() = runBlockingTest {
|
||||||
val t = fenixSearchEngineProvider.loadSearchEngines(testContext)
|
val expectedDefaults = fenixSearchEngineProvider.baseSearchEngines.toIdSet()
|
||||||
|
val expectedCustom = fenixSearchEngineProvider.customSearchEngines.toIdSet()
|
||||||
|
val expected = expectedDefaults + expectedCustom
|
||||||
|
|
||||||
println(t)
|
val actual = fenixSearchEngineProvider.installedSearchEngineIdentifiers(testContext)
|
||||||
|
assertEquals(expected, actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `GIVEN sharedprefs contains installed engines WHEN installedSearchEngineIdentifiers THEN defaultEngines + customEngines ids are returned`() = runBlockingTest {
|
||||||
|
val sp = testContext.getSharedPreferences(FenixSearchEngineProvider.PREF_FILE, Context.MODE_PRIVATE)
|
||||||
|
sp.edit().putStringSet(INSTALLED_ENGINES_KEY, STORED_INSTALLED_ENGINES).apply()
|
||||||
|
|
||||||
|
val expectedStored = STORED_INSTALLED_ENGINES
|
||||||
|
val expectedCustom = fenixSearchEngineProvider.customSearchEngines.toIdSet()
|
||||||
|
val expected = expectedStored + expectedCustom
|
||||||
|
|
||||||
|
val actual = fenixSearchEngineProvider.installedSearchEngineIdentifiers(testContext)
|
||||||
|
assertEquals(expected, actual)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun Deferred<SearchEngineList>.toIdSet() =
|
||||||
|
await().list.map { it.identifier }.toSet()
|
||||||
|
|
||||||
|
private val STORED_INSTALLED_ENGINES = setOf("bing", "ecosia")
|
||||||
|
|
||||||
class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvider(context) {
|
class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvider(context) {
|
||||||
override val defaultEngines: Deferred<SearchEngineList>
|
override val baseSearchEngines: Deferred<SearchEngineList>
|
||||||
get() {
|
get() {
|
||||||
val google = mockSearchEngine(id = "google-b-1-m", n = "Google")
|
val google = mockSearchEngine(id = "google-b-1-m", n = "Google")
|
||||||
|
|
||||||
|
@ -68,7 +94,7 @@ class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvide
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val bundledEngines = CompletableDeferred(
|
override val bundledSearchEngines = CompletableDeferred(
|
||||||
SearchEngineList(
|
SearchEngineList(
|
||||||
listOf(
|
listOf(
|
||||||
mockSearchEngine("ecosia", "Ecosia"),
|
mockSearchEngine("ecosia", "Ecosia"),
|
||||||
|
@ -78,7 +104,7 @@ class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvide
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
override var customEngines: Deferred<SearchEngineList>
|
override var customSearchEngines: Deferred<SearchEngineList>
|
||||||
get() {
|
get() {
|
||||||
return CompletableDeferred(
|
return CompletableDeferred(
|
||||||
SearchEngineList(
|
SearchEngineList(
|
||||||
|
|
Loading…
Reference in New Issue