Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
const { ExperimentManager } = ChromeUtils.importESModule(
);
const TEST_CONFIG = {
slug: "test-experiment",
branches: [
{
slug: "control",
ratio: 1,
},
{
slug: "branchA",
ratio: 1,
},
{
slug: "branchB",
ratio: 1,
},
],
namespace: "test-namespace",
start: 0,
count: 2000,
total: 10000,
};
add_task(async function test_generateTestIds() {
let result = await ExperimentManager.generateTestIds(TEST_CONFIG);
Assert.ok(result, "should return object");
Assert.ok(result.notInExperiment, "should have a id for no experiment");
Assert.ok(result.control, "should have id for control");
Assert.ok(result.branchA, "should have id for branchA");
Assert.ok(result.branchB, "should have id for branchB");
});
add_task(async function test_generateTestIds_bucketConfig() {
const { slug, branches, namespace, start, count, total } = TEST_CONFIG;
const result = await ExperimentManager.generateTestIds({
slug,
branches,
bucketConfig: { namespace, start, count, total },
});
Assert.ok(result, "should return object");
Assert.ok(result.notInExperiment, "should have a id for no experiment");
Assert.ok(result.control, "should have id for control");
Assert.ok(result.branchA, "should have id for branchA");
Assert.ok(result.branchB, "should have id for branchB");
});
add_task(async function test_generateTestIds_withoutNot() {
const result = await ExperimentManager.generateTestIds({
...TEST_CONFIG,
count: TEST_CONFIG.total,
});
Assert.ok(result, "should return object");
Assert.equal(
result.notInExperiment,
undefined,
"should not have a id for no experiment"
);
Assert.ok(result.control, "should have id for control");
Assert.ok(result.branchA, "should have id for branchA");
Assert.ok(result.branchB, "should have id for branchB");
});
add_task(async function test_generateTestIds_input_errors() {
const { slug, branches, namespace, start, count, total } = TEST_CONFIG;
await Assert.rejects(
ExperimentManager.generateTestIds({
branches,
namespace,
start,
count,
total,
}),
/slug, namespace not in expected format/,
"should throw because of missing slug"
);
await Assert.rejects(
ExperimentManager.generateTestIds({ slug, branches, start, count, total }),
/slug, namespace not in expected format/,
"should throw because of missing namespace"
);
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches,
namespace,
count,
total,
}),
/Must include start, count, and total as integers/,
"should throw beause of missing start"
);
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches,
namespace,
start,
total,
}),
/Must include start, count, and total as integers/,
"should throw beause of missing count"
);
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches,
namespace,
count,
start,
}),
/Must include start, count, and total as integers/,
"should throw beause of missing total"
);
// Intentionally misspelled slug
let invalidBranches = [
{ slug: "a", ratio: 1 },
{ slugG: "b", ratio: 1 },
];
await Assert.rejects(
ExperimentManager.generateTestIds({
slug,
branches: invalidBranches,
namespace,
start,
count,
total,
}),
/branches parameter not in expected format/,
"should throw because of invalid format for branches"
);
});