Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
const { PreferenceExperiments } = ChromeUtils.importESModule(
);
const { ShieldPreferences } = ChromeUtils.importESModule(
);
const OPT_OUT_STUDIES_ENABLED_PREF = "app.shield.optoutstudies.enabled";
const { NormandyTestUtils } = ChromeUtils.importESModule(
);
const { addonStudyFactory, preferenceStudyFactory } =
NormandyTestUtils.factories;
ShieldPreferences.init();
decorate_task(
withMockPreferences(),
AddonStudies.withStudies([
addonStudyFactory({ active: true }),
addonStudyFactory({ active: true }),
]),
async function testDisableStudiesWhenOptOutDisabled({
mockPreferences,
addonStudies: [study1, study2],
}) {
mockPreferences.set(OPT_OUT_STUDIES_ENABLED_PREF, true);
const observers = [
studyEndObserved(study1.recipeId),
studyEndObserved(study2.recipeId),
];
Services.prefs.setBoolPref(OPT_OUT_STUDIES_ENABLED_PREF, false);
await Promise.all(observers);
const newStudy1 = await AddonStudies.get(study1.recipeId);
const newStudy2 = await AddonStudies.get(study2.recipeId);
ok(
!newStudy1.active && !newStudy2.active,
"Setting the opt-out pref to false stops all active opt-out studies."
);
}
);
decorate_task(
withMockPreferences(),
PreferenceExperiments.withMockExperiments([
preferenceStudyFactory({ active: true }),
preferenceStudyFactory({ active: true }),
]),
withStub(PreferenceExperiments, "stop"),
async function testDisableExperimentsWhenOptOutDisabled({
mockPreferences,
prefExperiments: [study1, study2],
stopStub,
}) {
mockPreferences.set(OPT_OUT_STUDIES_ENABLED_PREF, true);
let stopArgs = [];
let stoppedBoth = new Promise(resolve => {
let calls = 0;
stopStub.callsFake(function () {
stopArgs.push(Array.from(arguments));
calls++;
if (calls == 2) {
resolve();
}
});
});
Services.prefs.setBoolPref(OPT_OUT_STUDIES_ENABLED_PREF, false);
await stoppedBoth;
Assert.deepEqual(stopArgs, [
[
study1.slug,
{
reason: "general-opt-out",
caller: "observePrefChange::general-opt-out",
},
],
[
study2.slug,
{
reason: "general-opt-out",
caller: "observePrefChange::general-opt-out",
},
],
]);
}
);