Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
/**
* This tests the SearchEngineSelector matching the correct variant engine.
* If multiple variants match, it should add the matching variants to the base
* cumulatively.
*/
"use strict";
const CONFIG = [
{
recordType: "engine",
identifier: "engine-1",
base: {},
urls: {
search: {
params: [
{
name: "partner-code",
value: "code",
},
],
},
},
variants: [
{
environment: { regions: ["CA", "GB", "IT"] },
urls: {
search: {
params: [],
},
},
},
{
environment: { regions: ["CA", "US"] },
urls: {
search: {
params: [
{
name: "partner-code",
value: "bar",
},
],
},
},
telemetrySuffix: "telemetry",
},
{
environment: { regions: ["CA", "GB"] },
urls: {
search: {
params: [
{
name: "partner-code",
value: "foo",
},
],
},
},
searchTermParamName: "search-param",
},
],
},
{
recordType: "defaultEngines",
specificDefaults: [],
},
{
recordType: "engineOrders",
orders: [],
},
];
const CONFIG_CLONE = structuredClone(CONFIG);
const engineSelector = new SearchEngineSelector();
let settings;
let configStub;
/**
* This function asserts if the actual engines returned equals the expected
* engines.
*
* @param {object} config
* A fake search config containing engines.
* @param {object} userEnv
* A fake user's environment including locale and region, experiment, etc.
* @param {Array} expectedEngines
* The array of expected engines to be returned from the fake config.
* @param {string} message
* The assertion message.
*/
async function assertActualEnginesEqualsExpected(
config,
userEnv,
expectedEngines,
message
) {
engineSelector._configuration = null;
configStub.returns(config);
let { engines } = await engineSelector.fetchEngineConfiguration(userEnv);
Assert.deepEqual(engines, expectedEngines, message);
}
add_setup(async function () {
settings = await RemoteSettings(SearchUtils.NEW_SETTINGS_KEY);
configStub = sinon.stub(settings, "get");
});
add_task(async function test_no_variants_match() {
await assertActualEnginesEqualsExpected(
CONFIG,
{
locale: "fi",
region: "FI",
},
[],
"Should match no variants."
);
});
add_task(async function test_match_and_apply_last_variants() {
await assertActualEnginesEqualsExpected(
CONFIG,
{
locale: "en-US",
region: "CA",
},
[
{
identifier: "engine-1",
urls: { search: { params: [{ name: "partner-code", value: "foo" }] } },
searchTermParamName: "search-param",
},
],
"Should match and apply last variant."
);
});
add_task(async function test_match_middle_variant() {
await assertActualEnginesEqualsExpected(
CONFIG,
{
locale: "en-US",
region: "US",
},
[
{
identifier: "engine-1",
urls: { search: { params: [{ name: "partner-code", value: "bar" }] } },
telemetrySuffix: "telemetry",
},
],
"Should match first and second variants."
);
});
add_task(async function test_match_first_and_last_variant() {
await assertActualEnginesEqualsExpected(
CONFIG,
{
locale: "en-GB",
region: "GB",
},
[
{
identifier: "engine-1",
urls: { search: { params: [{ name: "partner-code", value: "foo" }] } },
searchTermParamName: "search-param",
},
],
"Should match first and last variant."
);
});
add_task(async function test_match_variant_with_empty_params() {
await assertActualEnginesEqualsExpected(
CONFIG,
{
locale: "it",
region: "IT",
},
[
{
identifier: "engine-1",
urls: { search: { params: [] } },
},
],
"Should match the first variant with empty params."
);
});
add_task(async function test_config_has_not_been_modified() {
Assert.deepEqual(
CONFIG,
CONFIG_CLONE,
"Should not modify the original test config after applying variant engines to the base engine."
);
});