diff options
Diffstat (limited to 'browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_yelp.js')
-rw-r--r-- | browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_yelp.js | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_yelp.js b/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_yelp.js new file mode 100644 index 0000000000..b7c2bdc25c --- /dev/null +++ b/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_yelp.js @@ -0,0 +1,429 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Test for Yelp suggestions. + +const REMOTE_SETTINGS_RECORDS = [ + { + type: "yelp-suggestions", + attachment: { + subjects: ["ramen"], + preModifiers: ["best"], + postModifiers: ["delivery"], + locationSigns: [{ keyword: "in", needLocation: true }], + yelpModifiers: [], + icon: "1234", + score: 0.5, + }, + }, +]; + +add_setup(async function () { + Services.prefs.setBoolPref("browser.search.suggest.enabled", false); + + await QuickSuggestTestUtils.ensureQuickSuggestInit({ + remoteSettingsRecords: REMOTE_SETTINGS_RECORDS, + prefs: [ + ["quicksuggest.rustEnabled", true], + ["suggest.quicksuggest.sponsored", true], + ["suggest.yelp", true], + ["yelp.featureGate", true], + ], + }); +}); + +add_task(async function basic() { + for (let topPick of [true, false]) { + info("Setting yelpPriority: " + topPick); + await SpecialPowers.pushPrefEnv({ + set: [["browser.urlbar.quicksuggest.yelpPriority", topPick]], + }); + + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + value: "RaMeN iN tOkYo", + }); + + Assert.equal(UrlbarTestUtils.getResultCount(window), 2); + + const details = await UrlbarTestUtils.getDetailsOfResultAt(window, 1); + const { result } = details; + Assert.equal( + result.providerName, + UrlbarProviderQuickSuggest.name, + "The result should be from the expected provider" + ); + Assert.equal(result.payload.provider, "Yelp"); + Assert.equal( + result.payload.url, + "https://www.yelp.com/search?find_desc=RaMeN&find_loc=tOkYo&utm_medium=partner&utm_source=mozilla" + ); + Assert.equal(result.payload.title, "RaMeN iN tOkYo"); + + const { row } = details.element; + const bottom = row.querySelector(".urlbarView-row-body-bottom"); + Assert.ok(bottom, "Bottom text element should exist"); + Assert.ok( + BrowserTestUtils.isVisible(bottom), + "Bottom text element should be visible" + ); + Assert.equal( + bottom.textContent, + "Yelp ยท Sponsored", + "Bottom text is correct" + ); + + await UrlbarTestUtils.promisePopupClose(window); + await SpecialPowers.popPrefEnv(); + } +}); + +// Tests the "Show less frequently" result menu command. +add_task(async function resultMenu_show_less_frequently() { + info("Test for no yelpMinKeywordLength and no yelpShowLessFrequentlyCap"); + await doShowLessFrequently({ + minKeywordLength: 0, + frequentlyCap: 0, + testData: [ + { + input: "best ra", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best ra", + expected: { + hasSuggestion: false, + }, + }, + { + input: "best ram", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best ram", + expected: { + hasSuggestion: false, + }, + }, + { + input: "best rame", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best rame", + expected: { + hasSuggestion: false, + }, + }, + ], + }); + + info("Test whether yelpShowLessFrequentlyCap can work"); + await doShowLessFrequently({ + minKeywordLength: 0, + frequentlyCap: 2, + testData: [ + { + input: "best ra", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best ram", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best ram", + expected: { + hasSuggestion: false, + }, + }, + { + input: "best rame", + expected: { + hasSuggestion: true, + hasShowLessItem: false, + }, + }, + { + input: "best ramen", + expected: { + hasSuggestion: true, + hasShowLessItem: false, + }, + }, + ], + }); + + info( + "Test whether local yelp.minKeywordLength pref can override nimbus variable yelpMinKeywordLength" + ); + await doShowLessFrequently({ + minKeywordLength: 8, + frequentlyCap: 0, + testData: [ + { + input: "best ra", + expected: { + hasSuggestion: false, + }, + }, + { + input: "best ram", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best rame", + expected: { + hasSuggestion: true, + hasShowLessItem: true, + }, + }, + { + input: "best rame", + expected: { + hasSuggestion: false, + }, + }, + ], + }); +}); + +async function doShowLessFrequently({ + minKeywordLength, + frequentlyCap, + testData, +}) { + UrlbarPrefs.clear("yelp.showLessFrequentlyCount"); + UrlbarPrefs.clear("yelp.minKeywordLength"); + + let cleanUpNimbus = await UrlbarTestUtils.initNimbusFeature({ + yelpMinKeywordLength: minKeywordLength, + yelpShowLessFrequentlyCap: frequentlyCap, + }); + + for (let { input, expected } of testData) { + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + value: input, + }); + + if (expected.hasSuggestion) { + let resultIndex = 1; + let details = await UrlbarTestUtils.getDetailsOfResultAt( + window, + resultIndex + ); + Assert.equal(details.result.payload.provider, "Yelp"); + + if (expected.hasShowLessItem) { + // Click the command. + let previousShowLessFrequentlyCount = UrlbarPrefs.get( + "yelp.showLessFrequentlyCount" + ); + await UrlbarTestUtils.openResultMenuAndClickItem( + window, + "show_less_frequently", + { resultIndex, openByMouse: true } + ); + + Assert.equal( + UrlbarPrefs.get("yelp.showLessFrequentlyCount"), + previousShowLessFrequentlyCount + 1 + ); + Assert.equal( + UrlbarPrefs.get("yelp.minKeywordLength"), + input.length + 1 + ); + } else { + let menuitem = await UrlbarTestUtils.openResultMenuAndGetItem({ + window, + command: "show_less_frequently", + resultIndex: 1, + openByMouse: true, + }); + Assert.ok(!menuitem); + } + } else { + // Yelp suggestion should not be shown. + for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) { + let details = await UrlbarTestUtils.getDetailsOfResultAt(window, i); + Assert.notEqual(details.result.payload.provider, "Yelp"); + } + } + + await UrlbarTestUtils.promisePopupClose(window); + } + + await cleanUpNimbus(); + UrlbarPrefs.clear("yelp.showLessFrequentlyCount"); + UrlbarPrefs.clear("yelp.minKeywordLength"); +} + +// Tests the "Not relevant" result menu dismissal command. +add_task(async function resultMenu_not_relevant() { + await doDismiss({ + menu: "not_relevant", + assert: resuilt => { + Assert.ok( + QuickSuggest.blockedSuggestions.has(resuilt.payload.url), + "The URL should be register as blocked" + ); + }, + }); + + await QuickSuggest.blockedSuggestions.clear(); +}); + +// Tests the "Not interested" result menu dismissal command. +add_task(async function resultMenu_not_interested() { + await doDismiss({ + menu: "not_interested", + assert: () => { + Assert.ok(!UrlbarPrefs.get("suggest.yelp")); + }, + }); + + UrlbarPrefs.clear("suggest.yelp"); +}); + +async function doDismiss({ menu, assert }) { + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + value: "ramen", + }); + + let resultCount = UrlbarTestUtils.getResultCount(window); + let resultIndex = 1; + let details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex); + Assert.equal(details.result.payload.provider, "Yelp"); + let result = details.result; + + // Click the command. + await UrlbarTestUtils.openResultMenuAndClickItem( + window, + ["[data-l10n-id=firefox-suggest-command-dont-show-this]", menu], + { + resultIndex, + openByMouse: true, + } + ); + + // The row should be a tip now. + Assert.ok(gURLBar.view.isOpen, "The view should remain open after dismissal"); + Assert.equal( + UrlbarTestUtils.getResultCount(window), + resultCount, + "The result count should not haved changed after dismissal" + ); + details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex); + Assert.equal( + details.type, + UrlbarUtils.RESULT_TYPE.TIP, + "Row should be a tip after dismissal" + ); + Assert.equal( + details.result.payload.type, + "dismissalAcknowledgment", + "Tip type should be dismissalAcknowledgment" + ); + Assert.ok( + !details.element.row.hasAttribute("feedback-acknowledgment"), + "Row should not have feedback acknowledgment after dismissal" + ); + + // Get the dismissal acknowledgment's "Got it" button and click it. + let gotItButton = UrlbarTestUtils.getButtonForResultIndex( + window, + "0", + resultIndex + ); + Assert.ok(gotItButton, "Row should have a 'Got it' button"); + EventUtils.synthesizeMouseAtCenter(gotItButton, {}, window); + + // The view should remain open and the tip row should be gone. + Assert.ok( + gURLBar.view.isOpen, + "The view should remain open clicking the 'Got it' button" + ); + Assert.equal( + UrlbarTestUtils.getResultCount(window), + resultCount - 1, + "The result count should be one less after clicking 'Got it' button" + ); + + for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) { + details = await UrlbarTestUtils.getDetailsOfResultAt(window, i); + Assert.ok( + details.type != UrlbarUtils.RESULT_TYPE.TIP && + details.result.payload.provider !== "Yelp", + "Tip result and Yelp result should not be present" + ); + } + + assert(result); + + await UrlbarTestUtils.promisePopupClose(window); + + // Check that the result should not be shown anymore. + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + value: "ramen", + }); + + for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) { + details = await UrlbarTestUtils.getDetailsOfResultAt(window, i); + Assert.ok( + details.result.payload.provider !== "Yelp", + "Yelp result should not be present" + ); + } + + await UrlbarTestUtils.promisePopupClose(window); +} + +// Tests the row/group label. +add_task(async function rowLabel() { + let tests = [ + { topPick: true, label: "Local recommendations" }, + { topPick: false, label: "Firefox Suggest" }, + ]; + + for (let { topPick, label } of tests) { + await SpecialPowers.pushPrefEnv({ + set: [["browser.urlbar.yelp.priority", topPick]], + }); + + await UrlbarTestUtils.promiseAutocompleteResultPopup({ + window, + value: "ramen", + }); + Assert.equal(UrlbarTestUtils.getResultCount(window), 2); + + const { element } = await UrlbarTestUtils.getDetailsOfResultAt(window, 1); + const row = element.row; + Assert.equal(row.getAttribute("label"), label); + + await UrlbarTestUtils.promisePopupClose(window); + await SpecialPowers.popPrefEnv(); + } +}); |