120 lines
3.1 KiB
JavaScript
120 lines
3.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Ensure all the engines defined in the configuration are valid by
|
|
// creating a refined configuration that includes all the engines
|
|
// with all the variants and subvariants enabled everywhere.
|
|
|
|
"use strict";
|
|
|
|
const IDS = new Set();
|
|
|
|
function uniqueId(id) {
|
|
while (IDS.has(id)) {
|
|
id += "_";
|
|
}
|
|
IDS.add(id);
|
|
return id;
|
|
}
|
|
|
|
/**
|
|
* For each subVariant, yields an array containing only that subVariant
|
|
* but with environment set to allRegionsAndLocales and optional to undefined.
|
|
* If subVariants is undefined, yields undefined once.
|
|
*
|
|
* @param {Array|undefined} subVariants
|
|
* The original subVariants array.
|
|
* @yields {Array|undefined}
|
|
* An array containing only one subVariant.
|
|
*/
|
|
function* generateSubvariants(subVariants) {
|
|
if (!subVariants) {
|
|
yield undefined;
|
|
return;
|
|
}
|
|
|
|
for (let subVariant of subVariants) {
|
|
yield [
|
|
{
|
|
...subVariant,
|
|
optional: undefined,
|
|
environment: { allRegionsAndLocales: true },
|
|
},
|
|
];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* For each variant and subVariant, yields an array containing only that variant
|
|
* and subVariant but with environment set to allRegionsAndLocales and optional
|
|
* to undefined in both the variant and subvariant.
|
|
*
|
|
* @param {Array|undefined} variants
|
|
* The original variants array.
|
|
* @yields {Array|undefined}
|
|
* An array containing only one variant.
|
|
*/
|
|
function* generateVariants(variants) {
|
|
for (let variant of variants) {
|
|
for (let subVariants of generateSubvariants(variant.subVariants)) {
|
|
yield [
|
|
{
|
|
...variant,
|
|
optional: undefined,
|
|
environment: { allRegionsAndLocales: true },
|
|
subVariants,
|
|
},
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* For each variant and subVariant of a given engine, yields an engine with
|
|
* only that Variant and subVariant but enabled everywhere. Also makes sure
|
|
* no identifiers and names of yielded engines are duplicated and works when
|
|
* there are no variants or subVariants.
|
|
*
|
|
* @param {object} engine
|
|
* The engine with (potentially) multiple variants.
|
|
* @yields {object}
|
|
* The same engine but with a single variant that is enabled everywhere.
|
|
*/
|
|
function* generateEngineVariants(engine) {
|
|
for (let variants of generateVariants(engine.variants)) {
|
|
let id = uniqueId(engine.identifier);
|
|
yield {
|
|
...engine,
|
|
base: {
|
|
...engine.base,
|
|
// Reuse identifier as name to avoid duplicated names.
|
|
name: id,
|
|
},
|
|
identifier: id,
|
|
variants,
|
|
};
|
|
}
|
|
}
|
|
|
|
add_task(async function test_validate_all_engines_and_variants() {
|
|
let settings = RemoteSettings(SearchUtils.SETTINGS_KEY);
|
|
let config = await settings.get();
|
|
config = config.flatMap(obj => {
|
|
if (obj.recordType == "engine") {
|
|
return [...generateEngineVariants(obj)];
|
|
}
|
|
return obj;
|
|
});
|
|
|
|
sinon.stub(settings, "get").returns(config);
|
|
await Services.search.init();
|
|
|
|
for (let id of IDS) {
|
|
Assert.ok(
|
|
!!Services.search.getEngineById(id),
|
|
`Engine with id '${id}' was found.`
|
|
);
|
|
}
|
|
|
|
sinon.restore();
|
|
});
|