summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_engine_ids.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_engine_ids.js144
1 files changed, 144 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_engine_ids.js b/toolkit/components/search/tests/xpcshell/test_engine_ids.js
new file mode 100644
index 0000000000..c6e5e7e148
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_engine_ids.js
@@ -0,0 +1,144 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * Tests Search Engine IDs are created correctly.
+ */
+
+"use strict";
+
+const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
+ "resource://testing-common/EnterprisePolicyTesting.sys.mjs"
+);
+
+const CONFIG = [
+ {
+ webExtension: {
+ id: "engine@search.mozilla.org",
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ default: "yes",
+ },
+ ],
+ },
+];
+
+add_task(async function setup() {
+ useHttpServer("opensearch");
+ await SearchTestUtils.useTestEngines("data", null, CONFIG);
+ await AddonTestUtils.promiseStartupManager();
+ await Services.search.init();
+});
+
+add_task(async function test_add_on_engine_id() {
+ let addOnEngine = Services.search.defaultEngine;
+
+ Assert.equal(
+ addOnEngine.name,
+ "Test search engine",
+ "Should have installed the Test search engine as default."
+ );
+ Assert.ok(addOnEngine.id, "The Addon Search Engine should have an id.");
+ Assert.equal(
+ addOnEngine.id,
+ "engine@search.mozilla.orgdefault",
+ "The Addon Search Engine id should be the webextension id + the locale."
+ );
+});
+
+add_task(async function test_user_engine_id() {
+ let promiseEngineAdded = SearchTestUtils.promiseSearchNotification(
+ SearchUtils.MODIFIED_TYPE.ADDED,
+ SearchUtils.TOPIC_ENGINE_MODIFIED
+ );
+
+ await Services.search.addUserEngine(
+ "user",
+ "https://example.com/user?q={searchTerms}",
+ "u"
+ );
+
+ await promiseEngineAdded;
+ let userEngine = Services.search.getEngineByName("user");
+
+ Assert.ok(userEngine, "Should have installed the User Search Engine.");
+ Assert.ok(userEngine.id, "The User Search Engine should have an id.");
+ Assert.equal(
+ userEngine.id.length,
+ 36,
+ "The User Search Engine id should be a 36 character uuid."
+ );
+});
+
+add_task(async function test_open_search_engine_id() {
+ let promiseEngineAdded = SearchTestUtils.promiseSearchNotification(
+ SearchUtils.MODIFIED_TYPE.ADDED,
+ SearchUtils.TOPIC_ENGINE_MODIFIED
+ );
+
+ let openSearchEngine = await Services.search.addOpenSearchEngine(
+ gDataUrl + "simple.xml",
+ null
+ );
+
+ await promiseEngineAdded;
+
+ Assert.ok(openSearchEngine, "Should have installed the Open Search Engine.");
+ Assert.ok(openSearchEngine.id, "The Open Search Engine should have an id.");
+ Assert.equal(
+ openSearchEngine.id.length,
+ 36,
+ "The Open Search Engine id should be a 36 character uuid."
+ );
+});
+
+add_task(async function test_enterprise_policy_engine_id() {
+ await setupPolicyEngineWithJson({
+ policies: {
+ SearchEngines: {
+ Add: [
+ {
+ Name: "policy",
+ Description: "Test policy engine",
+ IconURL: "data:image/gif;base64,R0lGODl",
+ Alias: "p",
+ URLTemplate: "https://example.com?q={searchTerms}",
+ SuggestURLTemplate: "https://example.com/suggest/?q={searchTerms}",
+ },
+ ],
+ },
+ },
+ });
+
+ let policyEngine = Services.search.getEngineByName("policy");
+
+ Assert.ok(policyEngine, "Should have installed the Policy Engine.");
+ Assert.ok(policyEngine.id, "The Policy Engine should have an id.");
+ Assert.equal(
+ policyEngine.id,
+ "policy-policy",
+ "The Policy Engine id should be 'policy-' + 'the name of the policy engine'."
+ );
+});
+
+/**
+ * Loads a new enterprise policy, and re-initialise the search service
+ * with the new policy. Also waits for the search service to write the settings
+ * file to disk.
+ *
+ * @param {object} policy
+ * The enterprise policy to use.
+ */
+async function setupPolicyEngineWithJson(policy) {
+ Services.search.wrappedJSObject.reset();
+
+ await EnterprisePolicyTesting.setupPolicyEngineWithJson(policy);
+
+ let settingsWritten = SearchTestUtils.promiseSearchNotification(
+ "write-settings-to-disk-complete"
+ );
+ await Services.search.init();
+ await settingsWritten;
+}