No issue: small installedSearchEngineIdentifiers readability refactor
parent
2aa80eff95
commit
dfea877fb7
|
@ -140,20 +140,18 @@ open class FenixSearchEngineProvider(
|
||||||
suspend fun installedSearchEngineIdentifiers(context: Context): Set<String> {
|
suspend fun installedSearchEngineIdentifiers(context: Context): Set<String> {
|
||||||
val prefs = prefs(context)
|
val prefs = prefs(context)
|
||||||
|
|
||||||
val identifiers = if (!prefs.contains(INSTALLED_ENGINES_KEY)) {
|
if (!prefs.contains(INSTALLED_ENGINES_KEY)) {
|
||||||
val defaultSet = baseSearchEngines.await()
|
val defaultSet = baseSearchEngines.await()
|
||||||
.list
|
.list
|
||||||
.map { it.identifier }
|
.map { it.identifier }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
|
||||||
prefs.edit().putStringSet(INSTALLED_ENGINES_KEY, defaultSet).apply()
|
prefs.edit().putStringSet(INSTALLED_ENGINES_KEY, defaultSet).apply()
|
||||||
defaultSet
|
|
||||||
} else {
|
|
||||||
prefs.getStringSet(INSTALLED_ENGINES_KEY, setOf()) ?: setOf()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val installedIdentifiers = prefs(context).getStringSet(INSTALLED_ENGINES_KEY, setOf()) ?: setOf()
|
||||||
val customEngineIdentifiers = customSearchEngines.await().list.map { it.identifier }.toSet()
|
val customEngineIdentifiers = customSearchEngines.await().list.map { it.identifier }.toSet()
|
||||||
return identifiers + customEngineIdentifiers
|
return installedIdentifiers + customEngineIdentifiers
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
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.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
|
||||||
|
@ -17,27 +13,22 @@ 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.junit.runner.RunWith
|
||||||
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.TestApplication
|
||||||
import org.mozilla.fenix.components.searchengine.FenixSearchEngineProvider.Companion.INSTALLED_ENGINES_KEY
|
import org.mozilla.fenix.components.searchengine.FenixSearchEngineProvider.Companion.INSTALLED_ENGINES_KEY
|
||||||
import org.robolectric.RobolectricTestRunner
|
import org.robolectric.RobolectricTestRunner
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
import java.util.UUID
|
|
||||||
|
|
||||||
@ExperimentalCoroutinesApi
|
@ExperimentalCoroutinesApi
|
||||||
@RunWith(RobolectricTestRunner::class)
|
@RunWith(RobolectricTestRunner::class)
|
||||||
@Config(application = TestApplication::class)
|
@Config(application = TestApplication::class)
|
||||||
class FenixSearchEngineProviderTest {
|
class FenixSearchEngineProviderTest {
|
||||||
|
|
||||||
// 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,9 +53,9 @@ class FenixSearchEngineProviderTest {
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN sharedprefs contains installed engines WHEN installedSearchEngineIdentifiers THEN defaultEngines + customEngines ids are returned`() = runBlockingTest {
|
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)
|
val sp = testContext.getSharedPreferences(FenixSearchEngineProvider.PREF_FILE, Context.MODE_PRIVATE)
|
||||||
sp.edit().putStringSet(INSTALLED_ENGINES_KEY, STORED_INSTALLED_ENGINES).apply()
|
sp.edit().putStringSet(INSTALLED_ENGINES_KEY, persistedInstalledEngines).apply()
|
||||||
|
|
||||||
val expectedStored = STORED_INSTALLED_ENGINES
|
val expectedStored = persistedInstalledEngines
|
||||||
val expectedCustom = fenixSearchEngineProvider.customSearchEngines.toIdSet()
|
val expectedCustom = fenixSearchEngineProvider.customSearchEngines.toIdSet()
|
||||||
val expected = expectedStored + expectedCustom
|
val expected = expectedStored + expectedCustom
|
||||||
|
|
||||||
|
@ -76,7 +67,7 @@ class FenixSearchEngineProviderTest {
|
||||||
private suspend fun Deferred<SearchEngineList>.toIdSet() =
|
private suspend fun Deferred<SearchEngineList>.toIdSet() =
|
||||||
await().list.map { it.identifier }.toSet()
|
await().list.map { it.identifier }.toSet()
|
||||||
|
|
||||||
private val STORED_INSTALLED_ENGINES = setOf("bing", "ecosia")
|
private val persistedInstalledEngines = setOf("bing", "ecosia")
|
||||||
|
|
||||||
class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvider(context) {
|
class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvider(context) {
|
||||||
override val baseSearchEngines: Deferred<SearchEngineList>
|
override val baseSearchEngines: Deferred<SearchEngineList>
|
||||||
|
@ -114,18 +105,13 @@ class FakeFenixSearchEngineProvider(context: Context) : FenixSearchEngineProvide
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
set(_) = throw RuntimeException("Setting not currently supported on this fake")
|
set(_) = throw NotImplementedError("Setting not currently supported on this fake")
|
||||||
|
|
||||||
private fun mockSearchEngine(
|
private fun mockSearchEngine(
|
||||||
id: String,
|
id: String,
|
||||||
n: String = id
|
n: String = id
|
||||||
// TODO this fails with `Missing calls inside every { ... } block`. Not sure why
|
|
||||||
// ) = mockk<SearchEngine> {
|
|
||||||
// every { identifier } returns id
|
|
||||||
// every { name } returns n
|
|
||||||
// every { icon } returns mockk()
|
|
||||||
// }
|
|
||||||
): SearchEngine {
|
): SearchEngine {
|
||||||
|
// Uses Mockito because of a strange Mockk error. Feel free to rewrite
|
||||||
return mock(SearchEngine::class.java).apply {
|
return mock(SearchEngine::class.java).apply {
|
||||||
`when`(identifier).thenReturn(id)
|
`when`(identifier).thenReturn(id)
|
||||||
`when`(name).thenReturn(n)
|
`when`(name).thenReturn(n)
|
||||||
|
|
Loading…
Reference in New Issue