summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_policyEngine.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/search/tests/xpcshell/test_policyEngine.js')
-rw-r--r--toolkit/components/search/tests/xpcshell/test_policyEngine.js185
1 files changed, 185 insertions, 0 deletions
diff --git a/toolkit/components/search/tests/xpcshell/test_policyEngine.js b/toolkit/components/search/tests/xpcshell/test_policyEngine.js
new file mode 100644
index 0000000000..4dd58c8fc7
--- /dev/null
+++ b/toolkit/components/search/tests/xpcshell/test_policyEngine.js
@@ -0,0 +1,185 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * Tests that Enterprise Policy Engines can be installed correctly.
+ */
+
+"use strict";
+
+const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
+ "resource://testing-common/EnterprisePolicyTesting.sys.mjs"
+);
+
+SearchSettings.SETTINGS_INVALIDATION_DELAY = 100;
+
+/**
+ * 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;
+}
+
+add_task(async function setup() {
+ // This initializes the policy engine for xpcshell tests
+ let policies = Cc["@mozilla.org/enterprisepolicies;1"].getService(
+ Ci.nsIObserver
+ );
+ policies.observe(null, "policies-startup", null);
+
+ Services.fog.initializeFOG();
+ await AddonTestUtils.promiseStartupManager();
+ await SearchTestUtils.useTestEngines();
+
+ SearchUtils.GENERAL_SEARCH_ENGINE_IDS = new Set([
+ "engine-resourceicon@search.mozilla.org",
+ ]);
+});
+
+add_task(async function test_enterprise_policy_engine() {
+ 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 engine = Services.search.getEngineByName("policy");
+ Assert.ok(engine, "Should have installed the engine.");
+
+ Assert.equal(engine.name, "policy", "Should have the correct name");
+ Assert.equal(
+ engine.description,
+ "Test policy engine",
+ "Should have a description"
+ );
+ Assert.deepEqual(engine.aliases, ["p"], "Should have the correct alias");
+
+ let submission = engine.getSubmission("foo");
+ Assert.equal(
+ submission.uri.spec,
+ "https://example.com/?q=foo",
+ "Should have the correct search url"
+ );
+
+ submission = engine.getSubmission("foo", SearchUtils.URL_TYPE.SUGGEST_JSON);
+ Assert.equal(
+ submission.uri.spec,
+ "https://example.com/suggest/?q=foo",
+ "Should have the correct suggest url"
+ );
+
+ Services.search.defaultEngine = engine;
+
+ await assertGleanDefaultEngine({
+ normal: {
+ engineId: "other-policy",
+ displayName: "policy",
+ loadPath: "[policy]",
+ submissionUrl: "blank:",
+ verified: "verified",
+ },
+ });
+});
+
+add_task(async function test_enterprise_policy_engine_hidden_persisted() {
+ // Set the engine alias, and wait for the settings to be written.
+ let settingsWritten = SearchTestUtils.promiseSearchNotification(
+ "write-settings-to-disk-complete"
+ );
+ let engine = Services.search.getEngineByName("policy");
+ engine.hidden = "p1";
+ engine.alias = "p1";
+ await settingsWritten;
+
+ // This will reset and re-initialise the search service.
+ 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}",
+ },
+ ],
+ },
+ },
+ });
+
+ engine = Services.search.getEngineByName("policy");
+ Assert.equal(engine.alias, "p1", "Should have retained the engine alias");
+ Assert.ok(engine.hidden, "Should have kept the engine hidden");
+});
+
+add_task(async function test_enterprise_policy_engine_remove() {
+ // This will reset and re-initialise the search service.
+ await setupPolicyEngineWithJson({
+ policies: {},
+ });
+
+ Assert.ok(
+ !Services.search.getEngineByName("policy"),
+ "Should not have the policy engine installed"
+ );
+
+ let settings = await promiseSettingsData();
+ Assert.ok(
+ !settings.engines.find(e => e.name == "p1"),
+ "Should not have the engine settings stored"
+ );
+});
+
+add_task(async function test_enterprise_policy_hidden_default() {
+ await setupPolicyEngineWithJson({
+ policies: {
+ SearchEngines: {
+ Remove: ["Test search engine"],
+ },
+ },
+ });
+
+ Services.search.resetToAppDefaultEngine();
+
+ Assert.equal(Services.search.defaultEngine.name, "engine-resourceicon");
+});
+
+add_task(async function test_enterprise_policy_default() {
+ await setupPolicyEngineWithJson({
+ policies: {
+ SearchEngines: {
+ Default: "engine-pref",
+ },
+ },
+ });
+
+ Services.search.resetToAppDefaultEngine();
+
+ Assert.equal(Services.search.defaultEngine.name, "engine-pref");
+});