Skip to content

Commit b6aca32

Browse files
boekpocmo
authored andcommitted
For mozilla-mobile#191 - Test SearchSuggestionClient can get search suggestions for multiple search engines
1 parent 2b473cc commit b6aca32

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package mozilla.components.browser.search
22

33
import mozilla.components.browser.search.parser.defaultParser
4+
import mozilla.components.browser.search.parser.selectParser
45

56
typealias SearchSuggestionFetcher = suspend (url: String) -> String?
67
class SearchSuggestionClient(private val searchEngine: SearchEngine, private val fetcher: SearchSuggestionFetcher ) {
78
suspend fun getSuggestions(query: String): List<String>? {
89
val suggestionsURL = searchEngine.buildSuggestionsURL(query) ?: return null
10+
val parser = selectParser(searchEngine)
911

10-
return fetcher(suggestionsURL)?.let { defaultParser(it) }
12+
return fetcher(suggestionsURL)?.let { parser(it) }
1113
}
1214
}

components/browser/search/src/main/java/mozilla/components/browser/search/parser/SuggestionParser.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ private fun JSONArray.asSequence(): Sequence<Any> {
2020
}
2121
}
2222

23-
typealias Parser = (String) -> List<String>
23+
typealias JSONResponse = String
24+
typealias Parser = (JSONResponse) -> List<String>
2425

2526
private fun fromArrayResult(resultsIndex: Int): Parser {
2627
return { input ->

components/browser/search/src/test/java/mozilla/components/browser/search/SearchSuggestionClientTest.kt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,17 @@ import org.robolectric.RuntimeEnvironment
1515
@RunWith(RobolectricTestRunner::class)
1616
class SearchSuggestionClientTest {
1717
companion object {
18-
val GOOGLE_MOCK: SearchSuggestionFetcher = { "[\"firefox\",[\"firefox\",\"firefox for mac\",\"firefox quantum\",\"firefox update\",\"firefox esr\",\"firefox focus\",\"firefox addons\",\"firefox extensions\",\"firefox nightly\",\"firefox clear cache\"]]" }
18+
val GOOGLE_MOCK_RESPONSE: SearchSuggestionFetcher = { "[\"firefox\",[\"firefox\",\"firefox for mac\",\"firefox quantum\",\"firefox update\",\"firefox esr\",\"firefox focus\",\"firefox addons\",\"firefox extensions\",\"firefox nightly\",\"firefox clear cache\"]]" }
19+
val QWANT_MOCK_RESPONSE: SearchSuggestionFetcher = { "{\"status\":\"success\",\"data\":{\"items\":[{\"value\":\"firefox (video game)\",\"suggestType\":3},{\"value\":\"firefox addons\",\"suggestType\":12},{\"value\":\"firefox\",\"suggestType\":2},{\"value\":\"firefox quantum\",\"suggestType\":12},{\"value\":\"firefox focus\",\"suggestType\":12}],\"special\":[],\"availableQwick\":[]}}" }
1920
}
2021

2122
@Test
22-
fun `Get a list of results based on a search engine`() {
23+
fun `Get a list of results based on the Google search engine`() {
2324
val searchEngine = SearchEngineParser().load(
2425
RuntimeEnvironment.application.assets,
2526
"google", "searchplugins/google-nocodes.xml")
2627

27-
val client = SearchSuggestionClient(searchEngine, GOOGLE_MOCK)
28+
val client = SearchSuggestionClient(searchEngine, GOOGLE_MOCK_RESPONSE)
2829

2930
runBlocking {
3031
val results = client.getSuggestions("firefox")
@@ -33,4 +34,20 @@ class SearchSuggestionClientTest {
3334
assertEquals(expectedResults, results)
3435
}
3536
}
37+
38+
@Test
39+
fun `Get a list of results based on a non google search engine`() {
40+
val searchEngine = SearchEngineParser().load(
41+
RuntimeEnvironment.application.assets,
42+
"google", "searchplugins/qwant.xml")
43+
44+
val client = SearchSuggestionClient(searchEngine, QWANT_MOCK_RESPONSE)
45+
46+
runBlocking {
47+
val results = client.getSuggestions("firefox")
48+
val expectedResults = listOf("firefox (video game)", "firefox addons", "firefox", "firefox quantum", "firefox focus")
49+
50+
assertEquals(expectedResults, results)
51+
}
52+
}
3653
}

0 commit comments

Comments
 (0)