Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: appname == 'thunderbird' OR os == 'android'
- Manifest: toolkit/components/nimbus/test/unit/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
*/
"use strict";
const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
);
const RECIPES = [
NimbusTestUtils.factories.recipe.withFeatureConfig("experiment", {
featureId: "no-feature-firefox-desktop",
}),
NimbusTestUtils.factories.recipe.withFeatureConfig(
"rollout",
{ featureId: "no-feature-firefox-desktop" },
{ isRollout: true }
),
NimbusTestUtils.factories.recipe.withFeatureConfig(
"optin",
{ featureId: "no-feature-firefox-desktop" },
{
isRollout: true,
isFirefoxLabsOptIn: true,
firefoxLabsTitle: "title",
firefoxLabsDescription: "description",
firefoxLabsGroup: "group",
requiresRestart: false,
}
),
];
add_setup(function setup() {
// Instantiate the enterprise policy service.
void Cc["@mozilla.org/enterprisepolicies;1"].getService(Ci.nsIObserver);
});
async function doTest({
policies,
labsEnabled,
rolloutsEnabled,
studiesEnabled,
existingEnrollments = [],
expectedEnrollments,
expectedOptIns,
}) {
info("Enabling policy");
await EnterprisePolicyTesting.setupPolicyEngineWithJson({ policies });
info("Is policy engine active?");
Assert.equal(
Services.policies.status,
Ci.nsIEnterprisePolicies.ACTIVE,
"Policy engine is active"
);
const { cleanup, loader } = await NimbusTestUtils.setupTest({
init: false,
storePath: await NimbusTestUtils.createStoreWith(store => {
for (const slug of existingEnrollments) {
NimbusTestUtils.addEnrollmentForRecipe(
RECIPES.find(e => e.slug === slug),
{ store }
);
}
}),
experiments: RECIPES,
migrationState: NimbusTestUtils.migrationState.UNMIGRATED,
});
sinon.spy(loader, "updateRecipes");
sinon.spy(loader, "setTimer");
await ExperimentAPI.init();
Assert.equal(
ExperimentAPI.labsEnabled,
labsEnabled,
"FirefoxLabs is enabled"
);
Assert.equal(
ExperimentAPI.rolloutsEnabled,
rolloutsEnabled,
"Rollouts are enabled"
);
Assert.equal(
ExperimentAPI.studiesEnabled,
studiesEnabled,
"Studies are enabled"
);
Assert.equal(
loader._enabled,
labsEnabled || rolloutsEnabled || studiesEnabled,
"RemoteSettingsExperimentLoader initialized"
);
Assert.equal(
loader.setTimer.called,
labsEnabled || rolloutsEnabled || studiesEnabled,
"RemoteSettingsExperimentLoader polling for recipes"
);
Assert.equal(
loader.updateRecipes.called,
labsEnabled || rolloutsEnabled || studiesEnabled,
"RemoteSettingsExperimentLoader polling for recipes"
);
Assert.deepEqual(
ExperimentAPI.manager.store
.getAll()
.filter(e => e.active)
.map(e => e.slug)
.sort(),
expectedEnrollments.sort(),
"Should have expected enrollments"
);
Assert.deepEqual(
ExperimentAPI.manager.optInRecipes.map(e => e.slug).sort(),
expectedOptIns,
"Should have expected available opt-ins"
);
await NimbusTestUtils.cleanupManager(expectedEnrollments);
await cleanup();
}
add_task(async function testDisableStudiesPolicy() {
await doTest({
policies: { DisableFirefoxStudies: true },
labsEnabled: true,
rolloutsEnabled: true,
studiesEnabled: false,
expectedEnrollments: ["rollout"],
expectedOptIns: ["optin"],
});
});
add_task(async function testDisableLabsPolicy() {
await doTest({
policies: { UserMessaging: { FirefoxLabs: false } },
labsEnabled: false,
rolloutsEnabled: true,
studiesEnabled: true,
expectedEnrollments: ["experiment", "rollout"],
expectedOptIns: [],
});
});
add_task(async function testNimbusDisabled() {
await doTest({
policies: {
DisableRemoteImprovements: true,
DisableFirefoxStudies: true,
UserMessaging: { FirefoxLabs: false },
},
labsEnabled: false,
rolloutsEnabled: false,
studiesEnabled: false,
expectedEnrollments: [],
expectedOptIns: [],
});
});
add_task(async function testDisableLabsPolicyCausesUnenrollments() {
await doTest({
policies: { UserMessaging: { FirefoxLabs: false } },
labsEnabled: false,
rolloutsEnabled: true,
studiesEnabled: true,
expectedEnrollments: ["experiment", "rollout"],
existingEnrollments: ["optin"],
expectedOptIns: [],
});
});
add_task(async function testDisableRolloutPolicyCausesUnenrollments() {
await doTest({
policies: { DisableRemoteImprovements: true },
labsEnabled: true,
rolloutsEnabled: false,
studiesEnabled: true,
expectedEnrollments: ["experiment"],
existingEnrollments: ["rollout"],
expectedOptIns: ["optin"],
});
});