Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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/. */
// Tests for wikipedia suggestions.
"use strict";
add_setup(async function init() {
UrlbarPrefs.set("maxRichResults", 10);
let engine = await addTestSuggestionsEngine();
await SearchService.setDefault(engine, SearchService.CHANGE_REASON.UNKNOWN);
await QuickSuggestTestUtils.ensureQuickSuggestInit();
});
add_task(async function telemetryType() {
await doTelemetryTypeTest({
feature: "WikipediaSuggestions",
tests: [
{
source: "rust",
expected: "adm_nonsponsored",
},
{
source: "merino",
expected: "wikipedia",
},
],
});
});
add_task(async function prefs() {
let context = createContext("wikipedia", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
});
await doResultCheckTest({
env: {
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [QuickSuggestTestUtils.wikipediaRemoteSettings()],
},
],
},
tests: [
{
description: "Enable all",
prefs: [["suggest.quicksuggest.all", true]],
context,
expected: [
QuickSuggestTestUtils.wikipediaResult({ suggestedIndex: -1 }),
],
},
{
description: "Disable all",
prefs: [["suggest.quicksuggest.all", false]],
context,
expected: [],
},
{
description: "Feature gate is off",
prefs: [
["suggest.quicksuggest.all", true],
["suggest.quicksuggest.sponsored", true],
["wikipedia.featureGate", false],
],
context,
expected: [],
},
{
description: "Local feature switch is off",
prefs: [
["suggest.quicksuggest.all", true],
["suggest.quicksuggest.sponsored", true],
["suggest.wikipedia", false],
],
context,
expected: [],
},
],
});
});
add_task(async function keyword() {
await doResultCheckTest({
env: {
prefs: [["suggest.quicksuggest.all", true]],
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [QuickSuggestTestUtils.wikipediaRemoteSettings()],
},
],
},
tests: [
{
description: "Case insentive",
context: createContext("WikiPedia", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [
QuickSuggestTestUtils.wikipediaResult({ suggestedIndex: -1 }),
],
},
{
description: "Case insentive and leading spaces",
context: createContext(" wikiPEDIA", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [
QuickSuggestTestUtils.wikipediaResult({ suggestedIndex: -1 }),
],
},
{
description: "Empty string",
context: createContext("", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [],
},
{
description: "A space",
context: createContext(" ", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [],
},
{
description: "Some spaces",
context: createContext(" ", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [],
},
],
});
});
add_task(async function privateContext() {
await doResultCheckTest({
env: {
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [QuickSuggestTestUtils.wikipediaRemoteSettings()],
},
],
},
tests: [
{
prefs: [
["suggest.quicksuggest.all", true],
["browser.search.suggest.enabled.private", true],
],
context: createContext("wikipedia", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: true,
}),
expected: [],
},
],
});
});
add_task(async function showSearchSuggestionsFirst() {
let context = createContext("wikipedia", { isPrivate: false });
// Add some history that will match our query below.
let histories = Array.from(
{ length: UrlbarPrefs.get("maxRichResults") },
);
let historyResults = histories
.map(url =>
makeVisitResult(context, {
uri: url,
title: "test visit for " + url,
})
)
.reverse()
.slice(0, histories.length - 4);
await doResultCheckTest({
env: {
prefs: [
["suggest.quicksuggest.all", true],
["browser.search.suggest.enabled", true],
["suggest.searches", true],
["suggest.quickactions", false],
],
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [QuickSuggestTestUtils.wikipediaRemoteSettings()],
},
],
},
tests: [
{
description:
"When search suggestions come before general results and the only general result is a quick suggest result, it should come last.",
prefs: [["showSearchSuggestionsFirst", true]],
histories,
context,
expected: [
makeSearchResult(context, {
heuristic: true,
query: "wikipedia",
engineName: SearchService.defaultEngine.name,
}),
makeSearchResult(context, {
query: "wikipedia",
suggestion: "wikipedia foo",
engineName: SearchService.defaultEngine.name,
}),
makeSearchResult(context, {
query: "wikipedia",
suggestion: "wikipedia bar",
engineName: SearchService.defaultEngine.name,
}),
...historyResults,
QuickSuggestTestUtils.wikipediaResult(),
],
},
{
description:
"When search suggestions come before general results and there are other general results besides quick suggest, the quick suggest result should come last.",
prefs: [["showSearchSuggestionsFirst", false]],
histories,
context,
expected: [
makeSearchResult(context, {
heuristic: true,
query: "wikipedia",
engineName: SearchService.defaultEngine.name,
}),
...historyResults,
QuickSuggestTestUtils.wikipediaResult({ suggestedIndex: -1 }),
makeSearchResult(context, {
query: "wikipedia",
suggestion: "wikipedia foo",
engineName: SearchService.defaultEngine.name,
}),
makeSearchResult(context, {
query: "wikipedia",
suggestion: "wikipedia bar",
engineName: SearchService.defaultEngine.name,
}),
],
},
],
});
});
// Tests `UrlbarResult` dismissal.
add_task(async function dismissResult() {
await doDismissTest({
env: {
prefs: [["suggest.quicksuggest.all", true]],
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [
QuickSuggestTestUtils.wikipediaRemoteSettings(),
QuickSuggestTestUtils.wikipediaRemoteSettings({
keywords: ["http page"],
}),
QuickSuggestTestUtils.wikipediaRemoteSettings({
keywords: ["https page"],
}),
],
},
],
},
tests: [
{
context: createContext("wikipedia", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
// Index of result that will be executed the command.
targetIndex: 0,
// Before dismissing.
before: {
results: [
QuickSuggestTestUtils.wikipediaResult({
suggestedIndex: -1,
}),
],
},
// After dismissing.
after: {
results: [],
},
},
{
context: createContext("http page", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
targetIndex: 0,
before: {
results: [
QuickSuggestTestUtils.wikipediaResult({
fullKeyword: "http page",
suggestedIndex: -1,
}),
],
},
after: {
results: [],
},
},
{
context: createContext("https page", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
targetIndex: 0,
before: {
results: [
QuickSuggestTestUtils.wikipediaResult({
fullKeyword: "https page",
suggestedIndex: -1,
}),
],
},
after: {
results: [],
},
},
],
});
});
// The `Wikipedia` Rust providers should be passed to the Rust component when
// querying depending on whether sponsored and non-sponsored suggestions are
// enabled.
add_task(async function rustProviders() {
let result = QuickSuggestTestUtils.wikipediaResult();
await doRustBackendTest({
env: {
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [QuickSuggestTestUtils.wikipediaRemoteSettings()],
},
],
},
tests: [
{
prefs: [["suggest.quicksuggest.all", true]],
input: "wikipedia",
expected: [result.payload.url],
},
{
prefs: [["suggest.quicksuggest.all", false]],
input: "wikipedia",
expected: [],
},
],
});
});
add_task(async function keywordLengthThreshold() {
await doResultCheckTest({
env: {
prefs: [["suggest.quicksuggest.all", true]],
remoteSettingRecords: [
{
collection: QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [
QuickSuggestTestUtils.wikipediaRemoteSettings({
keywords: ["x", "xx"],
}),
],
},
],
},
tests: [
{
context: createContext("x", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [],
},
{
context: createContext("x ", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [],
},
{
context: createContext(" x", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [],
},
{
context: createContext("xx", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
}),
expected: [
QuickSuggestTestUtils.wikipediaResult({
fullKeyword: "xx",
suggestedIndex: -1,
}),
],
},
],
});
});
add_task(async function online() {
let context = createContext("wikipedia", {
providers: [UrlbarProviderQuickSuggest.name],
isPrivate: false,
});
await doResultCheckTest({
env: {
prefs: [["suggest.quicksuggest.all", true]],
merinoSuggestions: [
{
title: "Wikipedia Suggestion",
is_sponsored: false,
score: 0.23,
description: "description",
full_keyword: "wikipedia",
advertiser: "dynamic-wikipedia",
block_id: 0,
provider: "wikipedia",
categories: [6], // Education
},
],
},
tests: [
{
prefs: [
["quicksuggest.online.available", true],
["quicksuggest.online.enabled", true],
],
context,
expected: [
QuickSuggestTestUtils.wikipediaResult({
source: "merino",
provider: "wikipedia",
telemetryType: "wikipedia",
suggestedIndex: -1,
}),
],
},
{
prefs: [
["quicksuggest.online.available", false],
["quicksuggest.online.enabled", true],
],
context,
expected: [],
},
{
prefs: [
["quicksuggest.online.available", true],
["quicksuggest.online.enabled", false],
],
context,
expected: [],
},
],
});
});