Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
/* import-globals-from ../../../aboutconfig/test/browser/head.js */
"use strict";
Services.scriptloader.loadSubScript(
this
);
const {
NimbusTelemetry: { UnenrollReason },
} = ChromeUtils.importESModule("resource://nimbus/lib/Telemetry.sys.mjs");
add_setup(async function setup() {
const cleanup = await setupTest();
Services.fog.testResetFOG();
registerCleanupFunction(async function () {
await cleanup();
Services.fog.testResetFOG();
});
});
const PREF_PREFIX = "nimbus.test-only";
const BOOL_PREF = `${PREF_PREFIX}.foo`;
const STRING_PREF = `${PREF_PREFIX}.bar`;
add_task(async function testSetPref() {
using disposer = new DisposableStack();
disposer.defer(
NimbusTestUtils.addTestFeatures(
new ExperimentFeature("test-bool-feature", {
variables: {
foo: {
type: "boolean",
setPref: {
branch: "user",
pref: BOOL_PREF,
},
},
},
}),
new ExperimentFeature("test-string-feature", {
variables: {
bar: {
type: "string",
setPref: {
branch: "user",
pref: STRING_PREF,
},
},
},
})
)
);
disposer.defer(() => Services.prefs.deleteBranch(PREF_PREFIX));
await NimbusTestUtils.enrollWithFeatureConfig(
{ featureId: "test-bool-feature", value: { foo: true } },
{ slug: "bool-recipe" }
);
await NimbusTestUtils.enrollWithFeatureConfig(
{ featureId: "test-string-feature", value: { bar: "string" } },
{ slug: "string-recipe" }
);
await AboutConfigTest.withNewTab(async function () {
this.search(PREF_PREFIX);
const boolRow = this.getRow(BOOL_PREF);
boolRow.editColumnButton.click();
const boolEnrollment = ExperimentAPI.manager.store.get("bool-recipe");
Assert.ok(!boolEnrollment.active, "Enrollment is not active");
Assert.equal(boolEnrollment.unenrollReason, UnenrollReason.CHANGED_PREF);
Assert.deepEqual(
Glean.nimbusEvents.unenrollment
.testGetValue("events")
?.map(ev => ev.extra),
[
{
experiment: "bool-recipe",
branch: "control",
reason: UnenrollReason.CHANGED_PREF,
changed_pref: BOOL_PREF,
about_config_change: "true",
},
]
);
Services.fog.testResetFOG();
const stringRow = this.getRow(STRING_PREF);
stringRow.editColumnButton.click();
stringRow.valueInput.value = "different";
stringRow.valueInput.blur();
stringRow.editColumnButton.click();
const stringEnrollment = ExperimentAPI.manager.store.get("string-recipe");
Assert.ok(!stringEnrollment.active, "Enrollment is not active");
Assert.equal(stringEnrollment.unenrollReason, UnenrollReason.CHANGED_PREF);
Assert.deepEqual(
Glean.nimbusEvents.unenrollment
.testGetValue("events")
?.map(ev => ev.extra),
[
{
experiment: "string-recipe",
branch: "control",
reason: UnenrollReason.CHANGED_PREF,
changed_pref: STRING_PREF,
about_config_change: "true",
},
]
);
Services.fog.testResetFOG();
});
});
add_task(async function testPrefFlips() {
using disposer = new DisposableStack();
disposer.defer(() => Services.prefs.deleteBranch(PREF_PREFIX));
await NimbusTestUtils.enrollWithFeatureConfig(
{
featureId: "prefFlips",
value: {
prefs: {
[BOOL_PREF]: {
branch: "user",
value: true,
},
},
},
},
{ slug: "bool-flip" }
);
await NimbusTestUtils.enrollWithFeatureConfig(
{
featureId: "prefFlips",
value: {
prefs: {
[STRING_PREF]: {
branch: "user",
value: "string",
},
},
},
},
{ slug: "string-flip" }
);
await AboutConfigTest.withNewTab(async function () {
this.search(PREF_PREFIX);
const boolRow = this.getRow(BOOL_PREF);
boolRow.editColumnButton.click();
const boolEnrollment = ExperimentAPI.manager.store.get("bool-flip");
Assert.ok(!boolEnrollment.active, "Enrollment is not active");
Assert.equal(boolEnrollment.unenrollReason, UnenrollReason.CHANGED_PREF);
Assert.deepEqual(
Glean.nimbusEvents.unenrollment
.testGetValue("events")
?.map(ev => ev.extra),
[
{
experiment: "bool-flip",
branch: "control",
reason: UnenrollReason.CHANGED_PREF,
changed_pref: BOOL_PREF,
about_config_change: "true",
},
]
);
Services.fog.testResetFOG();
const stringRow = this.getRow(STRING_PREF);
stringRow.editColumnButton.click();
stringRow.valueInput.value = "different";
stringRow.valueInput.blur();
stringRow.editColumnButton.click();
const stringEnrollment = ExperimentAPI.manager.store.get("string-flip");
Assert.ok(!stringEnrollment.active, "Enrollment is not active");
Assert.equal(stringEnrollment.unenrollReason, UnenrollReason.CHANGED_PREF);
Assert.deepEqual(
Glean.nimbusEvents.unenrollment
.testGetValue("events")
?.map(ev => ev.extra),
[
{
experiment: "string-flip",
branch: "control",
reason: UnenrollReason.CHANGED_PREF,
changed_pref: STRING_PREF,
about_config_change: "true",
},
]
);
Services.fog.testResetFOG();
});
});