summaryrefslogtreecommitdiffstats
path: root/toolkit/components/search/tests/xpcshell/test_search_config_v2_nimbus.js
blob: 56746a614f80e28199d3e2dc9ea58fe006d8dd5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/ */

/* Test to verify search-config-v2 preference is correctly toggled via a Nimbus
   variable. */

"use strict";

ChromeUtils.defineESModuleGetters(this, {
  SearchTestUtils: "resource://testing-common/SearchTestUtils.sys.mjs",
  ExperimentAPI: "resource://nimbus/ExperimentAPI.sys.mjs",
  ExperimentFakes: "resource://testing-common/NimbusTestUtils.sys.mjs",
  ExperimentManager: "resource://nimbus/lib/ExperimentManager.sys.mjs",
  AppProvidedSearchEngine:
    "resource://gre/modules/AppProvidedSearchEngine.sys.mjs",
});

add_task(async function test_nimbus_experiment_enabled() {
  Assert.equal(
    Services.prefs.getBoolPref("browser.search.newSearchConfig.enabled"),
    false,
    "newSearchConfig.enabled PREF should initially be false."
  );

  await ExperimentManager.onStartup();
  await ExperimentAPI.ready();

  let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig(
    {
      featureId: "search",
      value: {
        newSearchConfigEnabled: true,
      },
    },
    { isRollout: true }
  );

  Assert.equal(
    Services.prefs.getBoolPref("browser.search.newSearchConfig.enabled"),
    true,
    "After toggling the Nimbus variable, the current value of newSearchConfig.enabled PREF should be true."
  );

  Assert.equal(
    SearchUtils.newSearchConfigEnabled,
    true,
    "After toggling the Nimbus variable, newSearchConfig.enabled should be cached as true."
  );

  await AddonTestUtils.promiseStartupManager();
  await Services.search.init();
  await SearchTestUtils.useTestEngines();

  let { engines: engines2 } =
    await Services.search.wrappedJSObject._fetchEngineSelectorEngines();

  Assert.ok(
    engines2.some(engine => engine.identifier),
    "Engines in the search-config-v2 format should have an identifier."
  );

  let appProvidedEngines =
    await Services.search.wrappedJSObject.getAppProvidedEngines();

  Assert.ok(
    appProvidedEngines.every(
      engine => engine instanceof AppProvidedSearchEngine
    ),
    "All application provided engines for search-config-v2 should be instances of AppProvidedSearchEngine."
  );

  await doExperimentCleanup();

  Assert.equal(
    Services.prefs.getBoolPref("browser.search.newSearchConfig.enabled"),
    false,
    "After experiment unenrollment, the newSearchConfig.enabled should be false."
  );

  Assert.equal(
    SearchUtils.newSearchConfigEnabled,
    true,
    "After experiment unenrollment, newSearchConfig.enabled should be cached as true."
  );
});