summaryrefslogtreecommitdiffstats
path: root/toolkit/components/nimbus/test/unit/test_ExperimentManager_generateTestIds.js
blob: 17b34dc199aca0486b4ed49c43a522001e320cc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
"use strict";
const { ExperimentManager } = ChromeUtils.import(
  "resource://nimbus/lib/ExperimentManager.jsm"
);

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_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"
  );
});