mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
234 lines
6 KiB
JavaScript
234 lines
6 KiB
JavaScript
"use strict";
|
|
|
|
const { ExperimentFakes } = ChromeUtils.import(
|
|
"resource://testing-common/MSTestUtils.jsm"
|
|
);
|
|
|
|
const { TelemetryTestUtils } = ChromeUtils.import(
|
|
"resource://testing-common/TelemetryTestUtils.jsm"
|
|
);
|
|
|
|
const EVENT_CATEGORY = "messaging_experiments";
|
|
const EVENT_METHOD = "reach";
|
|
const EVENT_OBJECT = "cfr";
|
|
const COLLECTION_ID = "messaging-experiments";
|
|
|
|
const fakeRemoteSettingsClient = {
|
|
get() {},
|
|
};
|
|
|
|
add_task(async function test_sendReachEvents() {
|
|
const sandbox = sinon.createSandbox();
|
|
const manager = ExperimentFakes.manager();
|
|
const experiment = ExperimentFakes.experiment("cfr_exp_01");
|
|
const RECIPE_CFR = {
|
|
arguments: ExperimentFakes.recipe("cfr_exp_01", {
|
|
branches: [
|
|
{
|
|
slug: "control",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
slug: "variant_1",
|
|
value: {
|
|
content: {
|
|
targeting: "false",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
slug: "variant_2",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
const RECIPE_FOO = {
|
|
arguments: ExperimentFakes.recipe("foo", {
|
|
branches: [
|
|
{
|
|
slug: "control",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
slug: "variant_1",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
sandbox.stub(manager.store, "getExperimentForGroup").returns(experiment);
|
|
sandbox
|
|
.stub(fakeRemoteSettingsClient, "get")
|
|
.returns([RECIPE_CFR, RECIPE_FOO]);
|
|
|
|
const extra = { branches: "control;variant_2" };
|
|
const expectedEvents = [
|
|
[EVENT_CATEGORY, EVENT_METHOD, EVENT_OBJECT, "cfr_exp_01", extra],
|
|
];
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, true);
|
|
Services.telemetry.clearEvents();
|
|
|
|
await manager.sendReachEvents(fakeRemoteSettingsClient);
|
|
|
|
TelemetryTestUtils.assertEvents(expectedEvents);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, false);
|
|
sandbox.restore();
|
|
});
|
|
|
|
add_task(async function test_sendReachEvents_Failuure_RemoteSettings() {
|
|
const sandbox = sinon.createSandbox();
|
|
const manager = ExperimentFakes.manager();
|
|
const experiment = ExperimentFakes.experiment("cfr_exp_01");
|
|
sandbox.stub(manager.store, "getExperimentForGroup").returns(experiment);
|
|
sandbox.stub(fakeRemoteSettingsClient, "get").throws();
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, true);
|
|
Services.telemetry.clearEvents();
|
|
|
|
await manager.sendReachEvents(fakeRemoteSettingsClient);
|
|
|
|
TelemetryTestUtils.assertNumberOfEvents(0);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, false);
|
|
sandbox.restore();
|
|
});
|
|
|
|
add_task(async function test_sendReachEvents_Failure_No_Active() {
|
|
const sandbox = sinon.createSandbox();
|
|
const manager = ExperimentFakes.manager();
|
|
const RECIPE_CFR = {
|
|
arguments: ExperimentFakes.recipe("cfr_exp_01", {
|
|
branches: [
|
|
{
|
|
slug: "control",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
slug: "variant_1",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
sandbox.stub(manager.store, "getExperimentForGroup").returns(undefined);
|
|
sandbox.stub(fakeRemoteSettingsClient, "get").resolves([RECIPE_CFR]);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, true);
|
|
Services.telemetry.clearEvents();
|
|
|
|
await manager.sendReachEvents(fakeRemoteSettingsClient);
|
|
|
|
TelemetryTestUtils.assertNumberOfEvents(0);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, false);
|
|
sandbox.restore();
|
|
});
|
|
|
|
add_task(async function test_sendReachEvents_Failure_No_Recipe() {
|
|
const sandbox = sinon.createSandbox();
|
|
const manager = ExperimentFakes.manager();
|
|
const experiment = ExperimentFakes.experiment("cfr_exp_01", {
|
|
active: false,
|
|
});
|
|
const RECIPE_CFR = {
|
|
arguments: ExperimentFakes.recipe("cfr_exp_02", {
|
|
branches: [
|
|
{
|
|
slug: "control",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
slug: "variant_1",
|
|
value: {
|
|
content: {
|
|
targeting: "true",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
sandbox.stub(manager.store, "getExperimentForGroup").returns(experiment);
|
|
sandbox.stub(fakeRemoteSettingsClient, "get").resolves([RECIPE_CFR]);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, true);
|
|
Services.telemetry.clearEvents();
|
|
|
|
await manager.sendReachEvents(fakeRemoteSettingsClient);
|
|
|
|
TelemetryTestUtils.assertNumberOfEvents(0);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, false);
|
|
sandbox.restore();
|
|
});
|
|
|
|
add_task(async function test_sendReachEvents_Failure_No_Qualified() {
|
|
const sandbox = sinon.createSandbox();
|
|
const manager = ExperimentFakes.manager();
|
|
const experiment = ExperimentFakes.experiment("cfr_exp_01");
|
|
const RECIPE_CFR = {
|
|
arguments: ExperimentFakes.recipe("cfr_exp_01", {
|
|
branches: [
|
|
{
|
|
slug: "control",
|
|
value: {
|
|
content: {
|
|
targeting: "false",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
slug: "variant_1",
|
|
value: {
|
|
content: {
|
|
targeting: "false",
|
|
},
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
sandbox.stub(manager.store, "getExperimentForGroup").returns(experiment);
|
|
sandbox.stub(fakeRemoteSettingsClient, "get").resolves([RECIPE_CFR]);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, true);
|
|
Services.telemetry.clearEvents();
|
|
|
|
await manager.sendReachEvents(fakeRemoteSettingsClient);
|
|
|
|
TelemetryTestUtils.assertNumberOfEvents(0);
|
|
|
|
Services.telemetry.setEventRecordingEnabled(EVENT_CATEGORY, false);
|
|
sandbox.restore();
|
|
});
|