[fenix] Add tests for search (https://github.com/mozilla-mobile/fenix/pull/12437)
parent
afd8eafd9f
commit
d9e7a351fa
@ -0,0 +1,119 @@
|
||||
/* 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.search.awesomebar
|
||||
|
||||
import android.content.Context
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkStatic
|
||||
import io.mockk.unmockkStatic
|
||||
import io.mockk.verifySequence
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runBlockingTest
|
||||
import mozilla.components.browser.search.SearchEngine
|
||||
import mozilla.components.browser.search.provider.SearchEngineList
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.components.searchengine.FenixSearchEngineProvider
|
||||
|
||||
@ExperimentalCoroutinesApi
|
||||
class ShortcutsSuggestionProviderTest {
|
||||
|
||||
private lateinit var context: Context
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
mockkStatic(AppCompatResources::class)
|
||||
context = mockk {
|
||||
every { getString(R.string.search_shortcuts_engine_settings) } returns "Search engine settings"
|
||||
}
|
||||
|
||||
every { AppCompatResources.getDrawable(context, R.drawable.ic_settings) } returns null
|
||||
}
|
||||
|
||||
@After
|
||||
fun teardown() {
|
||||
unmockkStatic(AppCompatResources::class)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should clear is always false`() {
|
||||
val provider = ShortcutsSuggestionProvider(mockk(), mockk(), mockk(), mockk())
|
||||
assertFalse(provider.shouldClearSuggestions)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `returns suggestions from search engine provider`() = runBlockingTest {
|
||||
val engineOne = mockk<SearchEngine> {
|
||||
every { identifier } returns "1"
|
||||
every { name } returns "EngineOne"
|
||||
every { icon } returns mockk()
|
||||
}
|
||||
val engineTwo = mockk<SearchEngine> {
|
||||
every { identifier } returns "2"
|
||||
every { name } returns "EngineTwo"
|
||||
every { icon } returns mockk()
|
||||
}
|
||||
val searchEngineProvider = mockk<FenixSearchEngineProvider> {
|
||||
every { installedSearchEngines(context) } returns SearchEngineList(
|
||||
list = listOf(engineOne, engineTwo),
|
||||
default = null
|
||||
)
|
||||
}
|
||||
val provider = ShortcutsSuggestionProvider(searchEngineProvider, context, mockk(), mockk())
|
||||
|
||||
val suggestions = provider.onInputChanged("")
|
||||
assertEquals(3, suggestions.size)
|
||||
|
||||
assertEquals(provider, suggestions[0].provider)
|
||||
assertEquals(engineOne.identifier, suggestions[0].id)
|
||||
assertEquals(engineOne.icon, suggestions[0].icon)
|
||||
assertEquals(engineOne.name, suggestions[0].title)
|
||||
|
||||
assertEquals(provider, suggestions[1].provider)
|
||||
assertEquals(engineTwo.identifier, suggestions[1].id)
|
||||
assertEquals(engineTwo.icon, suggestions[1].icon)
|
||||
assertEquals(engineTwo.name, suggestions[1].title)
|
||||
|
||||
assertEquals(provider, suggestions[2].provider)
|
||||
assertEquals("Search engine settings", suggestions[2].id)
|
||||
assertEquals("Search engine settings", suggestions[2].title)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `callbacks are triggered when suggestions are clicked`() = runBlockingTest {
|
||||
val engineOne = mockk<SearchEngine>(relaxed = true)
|
||||
val searchEngineProvider = mockk<FenixSearchEngineProvider> {
|
||||
every { installedSearchEngines(context) } returns SearchEngineList(
|
||||
list = listOf(engineOne),
|
||||
default = null
|
||||
)
|
||||
}
|
||||
val selectShortcutEngine = mockk<(SearchEngine) -> Unit>(relaxed = true)
|
||||
val selectShortcutEngineSettings = mockk<() -> Unit>(relaxed = true)
|
||||
val provider = ShortcutsSuggestionProvider(
|
||||
searchEngineProvider,
|
||||
context,
|
||||
selectShortcutEngine,
|
||||
selectShortcutEngineSettings
|
||||
)
|
||||
|
||||
val suggestions = provider.onInputChanged("")
|
||||
assertEquals(2, suggestions.size)
|
||||
|
||||
suggestions[0].onSuggestionClicked?.invoke()
|
||||
suggestions[1].onSuggestionClicked?.invoke()
|
||||
|
||||
verifySequence {
|
||||
selectShortcutEngine(engineOne)
|
||||
selectShortcutEngineSettings()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
/* 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.search.toolbar
|
||||
|
||||
import io.mockk.MockKAnnotations
|
||||
import io.mockk.Runs
|
||||
import io.mockk.every
|
||||
import io.mockk.impl.annotations.MockK
|
||||
import io.mockk.just
|
||||
import io.mockk.slot
|
||||
import io.mockk.spyk
|
||||
import io.mockk.verify
|
||||
import mozilla.components.browser.toolbar.BrowserToolbar
|
||||
import mozilla.components.concept.engine.Engine
|
||||
import mozilla.components.concept.toolbar.Toolbar
|
||||
import mozilla.components.support.test.robolectric.testContext
|
||||
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.helpers.FenixRobolectricTestRunner
|
||||
|
||||
@RunWith(FenixRobolectricTestRunner::class)
|
||||
class ToolbarViewTest {
|
||||
|
||||
@MockK(relaxed = true) private lateinit var interactor: ToolbarInteractor
|
||||
@MockK private lateinit var engine: Engine
|
||||
private lateinit var toolbar: BrowserToolbar
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
MockKAnnotations.init(this)
|
||||
toolbar = spyk(BrowserToolbar(testContext))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `sets up interactor listeners`() {
|
||||
val urlCommitListener = slot<(String) -> Boolean>()
|
||||
val editListener = slot<Toolbar.OnEditListener>()
|
||||
every { toolbar.setOnUrlCommitListener(capture(urlCommitListener)) } just Runs
|
||||
every { toolbar.setOnEditListener(capture(editListener)) } just Runs
|
||||
|
||||
buildToolbarView(isPrivate = false)
|
||||
|
||||
assertFalse(urlCommitListener.captured("test"))
|
||||
verify { interactor.onUrlCommitted("test") }
|
||||
|
||||
assertFalse(editListener.captured.onCancelEditing())
|
||||
verify { interactor.onEditingCanceled() }
|
||||
|
||||
editListener.captured.onTextChanged("https://example.com")
|
||||
verify { interactor.onTextChanged("https://example.com") }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `sets toolbar to normal mode`() {
|
||||
buildToolbarView(isPrivate = false)
|
||||
assertFalse(toolbar.private)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `sets toolbar to private mode`() {
|
||||
buildToolbarView(isPrivate = true)
|
||||
assertTrue(toolbar.private)
|
||||
}
|
||||
|
||||
private fun buildToolbarView(isPrivate: Boolean) = ToolbarView(
|
||||
testContext,
|
||||
interactor,
|
||||
historyStorage = null,
|
||||
isPrivate = isPrivate,
|
||||
view = toolbar,
|
||||
engine = engine
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue