258 lines
6.7 KiB
JavaScript
258 lines
6.7 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests that ensure application provided engines have all base fields set up
|
|
* correctly from the search configuration.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
let CONFIG = [
|
|
{
|
|
identifier: "testEngine",
|
|
base: {
|
|
aliases: ["testEngine1", "testEngine2"],
|
|
charset: "EUC-JP",
|
|
classification: "general",
|
|
name: "testEngine name",
|
|
partnerCode: "pc",
|
|
urls: {
|
|
search: {
|
|
base: "https://example.com/1",
|
|
// Method defaults to GET
|
|
params: [
|
|
{ name: "partnerCode", value: "{partnerCode}" },
|
|
{ name: "starbase", value: "Regula I" },
|
|
{ name: "experiment", value: "Genesis" },
|
|
],
|
|
searchTermParamName: "search",
|
|
},
|
|
suggestions: {
|
|
base: "https://example.com/2",
|
|
method: "POST",
|
|
searchTermParamName: "suggestions",
|
|
},
|
|
trending: {
|
|
base: "https://example.com/3",
|
|
searchTermParamName: "trending",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
identifier: "testOtherValuesEngine",
|
|
base: {
|
|
classification: "unknown",
|
|
name: "testOtherValuesEngine name",
|
|
urls: {
|
|
search: {
|
|
base: "https://example.com/1",
|
|
searchTermParamName: "search",
|
|
},
|
|
trending: {
|
|
base: "https://example.com/3",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
identifier: "override",
|
|
recordType: "engine",
|
|
base: {
|
|
classification: "unknown",
|
|
name: "override name",
|
|
partnerCode: "old-pc",
|
|
urls: {
|
|
search: {
|
|
base: "https://www.example.com/search",
|
|
params: [
|
|
{ name: "old_param", value: "old_value" },
|
|
{ name: "pc", value: "{partnerCode}" },
|
|
],
|
|
searchTermParamName: "q",
|
|
},
|
|
},
|
|
},
|
|
variants: [
|
|
{
|
|
environment: {
|
|
locales: ["en-US"],
|
|
},
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const TEST_CONFIG_OVERRIDE = [
|
|
{
|
|
identifier: "override",
|
|
urls: {
|
|
search: {
|
|
params: [
|
|
{ name: "new_param", value: "new_value" },
|
|
{ name: "pc", value: "{partnerCode}" },
|
|
],
|
|
},
|
|
},
|
|
partnerCode: "new_partner_code",
|
|
telemetrySuffix: "tsfx",
|
|
clickUrl: "https://example.org/somewhere",
|
|
},
|
|
];
|
|
|
|
add_setup(async function () {
|
|
SearchTestUtils.setRemoteSettingsConfig(CONFIG);
|
|
await Services.search.init();
|
|
});
|
|
|
|
add_task(async function test_engine_with_all_params_set() {
|
|
let engine = Services.search.getEngineById("testEngine");
|
|
Assert.ok(engine, "Should have found the engine");
|
|
|
|
Assert.equal(
|
|
engine.name,
|
|
"testEngine name",
|
|
"Should have the correct engine name"
|
|
);
|
|
Assert.deepEqual(
|
|
engine.aliases,
|
|
["@testEngine1", "@testEngine2"],
|
|
"Should have the correct aliases"
|
|
);
|
|
Assert.ok(
|
|
engine.isGeneralPurposeEngine,
|
|
"Should be a general purpose engine"
|
|
);
|
|
Assert.equal(
|
|
engine.wrappedJSObject.queryCharset,
|
|
"EUC-JP",
|
|
"Should have the correct encoding"
|
|
);
|
|
|
|
let submission = engine.getSubmission("test");
|
|
Assert.equal(
|
|
submission.uri.spec,
|
|
"https://example.com/1?partnerCode=pc&starbase=Regula%20I&experiment=Genesis&search=test",
|
|
"Should have the correct search URL"
|
|
);
|
|
Assert.ok(!submission.postData, "Should not have postData for a GET url");
|
|
|
|
let suggestSubmission = engine.getSubmission(
|
|
"test",
|
|
SearchUtils.URL_TYPE.SUGGEST_JSON
|
|
);
|
|
Assert.equal(
|
|
suggestSubmission.uri.spec,
|
|
"https://example.com/2",
|
|
"Should have the correct suggestion URL"
|
|
);
|
|
Assert.equal(
|
|
suggestSubmission.postData.data.data,
|
|
"suggestions=test",
|
|
"Should have the correct postData for a POST URL"
|
|
);
|
|
|
|
let trendingSubmission = engine.getSubmission(
|
|
"",
|
|
SearchUtils.URL_TYPE.TRENDING_JSON
|
|
);
|
|
Assert.equal(
|
|
trendingSubmission.uri.spec,
|
|
"https://example.com/3?trending=",
|
|
"Should have the correct trending URL with search term parameter."
|
|
);
|
|
Assert.ok(
|
|
!trendingSubmission.postData,
|
|
"Should not have postData for a GET url"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_engine_with_some_params_set() {
|
|
let engine = Services.search.getEngineById("testOtherValuesEngine");
|
|
Assert.ok(engine, "Should have found the engine");
|
|
|
|
Assert.equal(
|
|
engine.name,
|
|
"testOtherValuesEngine name",
|
|
"Should have the correct engine name"
|
|
);
|
|
Assert.deepEqual(engine.aliases, [], "Should have no aliases");
|
|
Assert.ok(
|
|
!engine.isGeneralPurposeEngine,
|
|
"Should not be a general purpose engine"
|
|
);
|
|
Assert.equal(
|
|
engine.wrappedJSObject.queryCharset,
|
|
"UTF-8",
|
|
"Should default to UTF-8 charset"
|
|
);
|
|
Assert.equal(
|
|
engine.getSubmission("test").uri.spec,
|
|
"https://example.com/1?search=test",
|
|
"Should have the correct search URL"
|
|
);
|
|
Assert.equal(
|
|
engine.getSubmission("test", SearchUtils.URL_TYPE.SUGGEST_JSON),
|
|
null,
|
|
"Should not have a suggestions URL"
|
|
);
|
|
let trendingSubmission = engine.getSubmission(
|
|
"",
|
|
SearchUtils.URL_TYPE.TRENDING_JSON
|
|
);
|
|
Assert.equal(
|
|
trendingSubmission.uri.spec,
|
|
"https://example.com/3",
|
|
"Should have the correct trending URL without search term parameter."
|
|
);
|
|
});
|
|
|
|
add_task(async function test_engine_remote_override() {
|
|
// First check the existing engine doesn't have the overrides.
|
|
let engine = Services.search.getEngineById("override");
|
|
Assert.ok(engine, "Should have found the override engine");
|
|
|
|
Assert.equal(engine.name, "override name", "Should have the expected name");
|
|
Assert.equal(
|
|
engine.telemetryId,
|
|
"override",
|
|
"Should not have a telemetry suffix - overrides not applied yet"
|
|
);
|
|
Assert.equal(
|
|
engine.getSubmission("test").uri.spec,
|
|
"https://www.example.com/search?old_param=old_value&pc=old-pc&q=test",
|
|
"Should not have overridden URL - overrides not applied yet"
|
|
);
|
|
Assert.equal(
|
|
engine.clickUrl,
|
|
null,
|
|
"Should not have a click URL - overrides not applied yet"
|
|
);
|
|
|
|
// Now apply and test the overrides.
|
|
await SearchTestUtils.updateRemoteSettingsConfig(
|
|
CONFIG,
|
|
TEST_CONFIG_OVERRIDE
|
|
);
|
|
|
|
engine = Services.search.getEngineById("override");
|
|
Assert.ok(engine, "Should have found the override engine");
|
|
|
|
Assert.equal(engine.name, "override name", "Should have the expected name");
|
|
Assert.equal(
|
|
engine.telemetryId,
|
|
"override-tsfx",
|
|
"Should have the overridden telemetry suffix"
|
|
);
|
|
Assert.equal(
|
|
engine.getSubmission("test").uri.spec,
|
|
"https://www.example.com/search?new_param=new_value&pc=new_partner_code&q=test",
|
|
"Should have the overridden URL"
|
|
);
|
|
Assert.equal(
|
|
engine.clickUrl,
|
|
"https://example.org/somewhere",
|
|
"Should have the click URL specified by the override"
|
|
);
|
|
});
|