summaryrefslogtreecommitdiffstats
path: root/toolkit/components/normandy/test/browser/browser_AddonRollouts.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/normandy/test/browser/browser_AddonRollouts.js')
-rw-r--r--toolkit/components/normandy/test/browser/browser_AddonRollouts.js141
1 files changed, 141 insertions, 0 deletions
diff --git a/toolkit/components/normandy/test/browser/browser_AddonRollouts.js b/toolkit/components/normandy/test/browser/browser_AddonRollouts.js
new file mode 100644
index 0000000000..0826907b68
--- /dev/null
+++ b/toolkit/components/normandy/test/browser/browser_AddonRollouts.js
@@ -0,0 +1,141 @@
+"use strict";
+
+const { IndexedDB } = ChromeUtils.importESModule(
+ "resource://gre/modules/IndexedDB.sys.mjs"
+);
+
+const { AddonRollouts } = ChromeUtils.importESModule(
+ "resource://normandy/lib/AddonRollouts.sys.mjs"
+);
+
+decorate_task(AddonRollouts.withTestMock(), async function testGetMissing() {
+ ok(
+ !(await AddonRollouts.get("does-not-exist")),
+ "get should return null when the requested rollout does not exist"
+ );
+});
+
+decorate_task(
+ AddonRollouts.withTestMock(),
+ async function testAddUpdateAndGet() {
+ const rollout = {
+ slug: "test-rollout",
+ state: AddonRollouts.STATE_ACTIVE,
+ extension: {},
+ };
+ await AddonRollouts.add(rollout);
+ let storedRollout = await AddonRollouts.get(rollout.slug);
+ Assert.deepEqual(
+ rollout,
+ storedRollout,
+ "get should retrieve a rollout from storage."
+ );
+
+ rollout.state = AddonRollouts.STATE_ROLLED_BACK;
+ await AddonRollouts.update(rollout);
+ storedRollout = await AddonRollouts.get(rollout.slug);
+ Assert.deepEqual(
+ rollout,
+ storedRollout,
+ "get should retrieve a rollout from storage."
+ );
+ }
+);
+
+decorate_task(
+ AddonRollouts.withTestMock(),
+ async function testCantUpdateNonexistent() {
+ const rollout = {
+ slug: "test-rollout",
+ state: AddonRollouts.STATE_ACTIVE,
+ extensions: {},
+ };
+ await Assert.rejects(
+ AddonRollouts.update(rollout),
+ /doesn't already exist/,
+ "Update should fail if the rollout doesn't exist"
+ );
+ ok(
+ !(await AddonRollouts.has("test-rollout")),
+ "rollout should not have been added"
+ );
+ }
+);
+
+decorate_task(AddonRollouts.withTestMock(), async function testGetAll() {
+ const rollout1 = { slug: "test-rollout-1", extension: {} };
+ const rollout2 = { slug: "test-rollout-2", extension: {} };
+ await AddonRollouts.add(rollout1);
+ await AddonRollouts.add(rollout2);
+
+ const storedRollouts = await AddonRollouts.getAll();
+ Assert.deepEqual(
+ storedRollouts.sort((a, b) => a.id - b.id),
+ [rollout1, rollout2],
+ "getAll should return every stored rollout."
+ );
+});
+
+decorate_task(AddonRollouts.withTestMock(), async function testGetAllActive() {
+ const rollout1 = {
+ slug: "test-rollout-1",
+ state: AddonRollouts.STATE_ACTIVE,
+ };
+ const rollout3 = {
+ slug: "test-rollout-2",
+ state: AddonRollouts.STATE_ROLLED_BACK,
+ };
+ await AddonRollouts.add(rollout1);
+ await AddonRollouts.add(rollout3);
+
+ const activeRollouts = await AddonRollouts.getAllActive();
+ Assert.deepEqual(
+ activeRollouts,
+ [rollout1],
+ "getAllActive should return only active rollouts"
+ );
+});
+
+decorate_task(AddonRollouts.withTestMock(), async function testHas() {
+ const rollout = { slug: "test-rollout", extensions: {} };
+ await AddonRollouts.add(rollout);
+ ok(
+ await AddonRollouts.has(rollout.slug),
+ "has should return true for an existing rollout"
+ );
+ ok(
+ !(await AddonRollouts.has("does not exist")),
+ "has should return false for a missing rollout"
+ );
+});
+
+// init should mark active rollouts in telemetry
+decorate_task(
+ AddonRollouts.withTestMock(),
+ withStub(TelemetryEnvironment, "setExperimentActive"),
+ async function testInitTelemetry({ setExperimentActiveStub }) {
+ await AddonRollouts.add({
+ slug: "test-rollout-active-1",
+ state: AddonRollouts.STATE_ACTIVE,
+ });
+ await AddonRollouts.add({
+ slug: "test-rollout-active-2",
+ state: AddonRollouts.STATE_ACTIVE,
+ });
+ await AddonRollouts.add({
+ slug: "test-rollout-rolled-back",
+ state: AddonRollouts.STATE_ROLLED_BACK,
+ });
+
+ await AddonRollouts.init();
+
+ Assert.deepEqual(
+ setExperimentActiveStub.args,
+ [
+ ["test-rollout-active-1", "active", { type: "normandy-addonrollout" }],
+ ["test-rollout-active-2", "active", { type: "normandy-addonrollout" }],
+ ],
+ "init should set activate a telemetry experiment for active addons"
+ );
+ }
+);