@okeyamy/lua 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +552 -0
- package/build/es5/__tests__/ai-personalize.test.js +811 -0
- package/build/es5/__tests__/lua.js +134 -0
- package/build/es5/__tests__/original-roughly.js +197 -0
- package/build/es5/__tests__/original.js +174 -0
- package/build/es5/__tests__/unit.js +72 -0
- package/build/es5/__tests__/weighted-history.test.js +376 -0
- package/build/es5/ai-personalize.js +641 -0
- package/build/es5/index.js +30 -0
- package/build/es5/lua.js +366 -0
- package/build/es5/personalization.js +811 -0
- package/build/es5/prompts/personalization-prompts.js +260 -0
- package/build/es5/storage/weighted-history.js +384 -0
- package/build/es5/stores/browser-cookie.js +25 -0
- package/build/es5/stores/local.js +29 -0
- package/build/es5/stores/memory.js +22 -0
- package/build/es5/utils.js +54 -0
- package/build/es5/utm-personalize.js +817 -0
- package/build/es5/utm.js +304 -0
- package/build/lua.dev.js +1574 -0
- package/build/lua.es.js +1566 -0
- package/build/lua.js +1574 -0
- package/build/lua.min.js +8 -0
- package/package.json +68 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
5
|
+
var _memory = _interopRequireDefault(require("../stores/memory"));
|
|
6
|
+
var _lua = _interopRequireDefault(require("../lua"));
|
|
7
|
+
function createTestName() {
|
|
8
|
+
return "ab-test-".concat(Math.random().toString(36).slice(2));
|
|
9
|
+
}
|
|
10
|
+
it('should always bucket an inactive test to the default', function () {
|
|
11
|
+
var name = createTestName();
|
|
12
|
+
var i = 0;
|
|
13
|
+
while (i++ < 100) {
|
|
14
|
+
var test = new _lua.default({
|
|
15
|
+
store: (0, _memory.default)()
|
|
16
|
+
});
|
|
17
|
+
test.define([{
|
|
18
|
+
name: name,
|
|
19
|
+
active: false,
|
|
20
|
+
buckets: {
|
|
21
|
+
a: {
|
|
22
|
+
weight: 1,
|
|
23
|
+
default: true
|
|
24
|
+
},
|
|
25
|
+
b: {
|
|
26
|
+
weight: 1
|
|
27
|
+
},
|
|
28
|
+
c: {
|
|
29
|
+
weight: 1
|
|
30
|
+
},
|
|
31
|
+
d: {
|
|
32
|
+
weight: 1
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}]);
|
|
36
|
+
test.assign();
|
|
37
|
+
_assert.default.strictEqual('a', test.assignments()[name]);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
it('should always bucket to the winning test', function () {
|
|
41
|
+
var store = (0, _memory.default)();
|
|
42
|
+
var name = createTestName();
|
|
43
|
+
var defaultTests = [{
|
|
44
|
+
name: name,
|
|
45
|
+
buckets: {
|
|
46
|
+
a: {
|
|
47
|
+
weight: 1,
|
|
48
|
+
default: true
|
|
49
|
+
},
|
|
50
|
+
b: {
|
|
51
|
+
weight: 1
|
|
52
|
+
},
|
|
53
|
+
c: {
|
|
54
|
+
weight: 1
|
|
55
|
+
},
|
|
56
|
+
d: {
|
|
57
|
+
weight: 1
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}];
|
|
61
|
+
var test = new _lua.default({
|
|
62
|
+
store: store
|
|
63
|
+
});
|
|
64
|
+
test.define(defaultTests);
|
|
65
|
+
test.assign();
|
|
66
|
+
test.assign(name, 'b');
|
|
67
|
+
_assert.default.strictEqual('b', test.assignments()[name]);
|
|
68
|
+
defaultTests[0].buckets.a.winner = true;
|
|
69
|
+
test = new _lua.default({
|
|
70
|
+
store: store
|
|
71
|
+
});
|
|
72
|
+
test.define(defaultTests);
|
|
73
|
+
test.assign();
|
|
74
|
+
_assert.default.strictEqual('a', test.assignments()[name]);
|
|
75
|
+
});
|
|
76
|
+
it('should mark a test as active when assigned and persisted', function () {
|
|
77
|
+
var store = (0, _memory.default)();
|
|
78
|
+
var name = createTestName();
|
|
79
|
+
var defaultTests = [{
|
|
80
|
+
name: name,
|
|
81
|
+
active: false,
|
|
82
|
+
buckets: {
|
|
83
|
+
a: {
|
|
84
|
+
weight: 1,
|
|
85
|
+
default: true
|
|
86
|
+
},
|
|
87
|
+
b: {
|
|
88
|
+
weight: 1
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}];
|
|
92
|
+
var test = new _lua.default({
|
|
93
|
+
store: store
|
|
94
|
+
});
|
|
95
|
+
test.define(defaultTests);
|
|
96
|
+
test.assign();
|
|
97
|
+
_assert.default.ok(!test.definitions()[0].active);
|
|
98
|
+
test.assign(name, 'b');
|
|
99
|
+
_assert.default.ok(test.definitions()[0].active);
|
|
100
|
+
test = new _lua.default({
|
|
101
|
+
store: store
|
|
102
|
+
});
|
|
103
|
+
test.define(defaultTests);
|
|
104
|
+
test.assign();
|
|
105
|
+
_assert.default.ok(test.definitions()[0].active);
|
|
106
|
+
});
|
|
107
|
+
it('should extend assignments', function () {
|
|
108
|
+
var store = (0, _memory.default)();
|
|
109
|
+
var name = createTestName();
|
|
110
|
+
var defaultTests = [{
|
|
111
|
+
name: name,
|
|
112
|
+
active: false,
|
|
113
|
+
buckets: {
|
|
114
|
+
a: {
|
|
115
|
+
weight: 1,
|
|
116
|
+
default: true
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}];
|
|
120
|
+
var test = new _lua.default({
|
|
121
|
+
store: store
|
|
122
|
+
});
|
|
123
|
+
test.define(defaultTests);
|
|
124
|
+
test.assign();
|
|
125
|
+
test.extendAssignments = function (assignments) {
|
|
126
|
+
return Object.assign(assignments, {
|
|
127
|
+
foo: 'bar'
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
var assignments = test.assignments();
|
|
131
|
+
_assert.default.ok(name in assignments);
|
|
132
|
+
_assert.default.ok(assignments.foo === 'bar');
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbWVtb3J5IiwiX2x1YSIsImNyZWF0ZVRlc3ROYW1lIiwiY29uY2F0IiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJpdCIsIm5hbWUiLCJpIiwidGVzdCIsIkx1YSIsInN0b3JlIiwiTWVtb3J5U3RvcmUiLCJkZWZpbmUiLCJhY3RpdmUiLCJidWNrZXRzIiwiYSIsIndlaWdodCIsImRlZmF1bHQiLCJiIiwiYyIsImQiLCJhc3NpZ24iLCJhc3NlcnQiLCJzdHJpY3RFcXVhbCIsImFzc2lnbm1lbnRzIiwiZGVmYXVsdFRlc3RzIiwid2lubmVyIiwib2siLCJkZWZpbml0aW9ucyIsImV4dGVuZEFzc2lnbm1lbnRzIiwiT2JqZWN0IiwiZm9vIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL19fdGVzdHNfXy9sdWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCdcblxuaW1wb3J0IE1lbW9yeVN0b3JlIGZyb20gJy4uL3N0b3Jlcy9tZW1vcnknXG5pbXBvcnQgTHVhIGZyb20gJy4uL2x1YSdcblxuZnVuY3Rpb24gY3JlYXRlVGVzdE5hbWUoKSB7XG4gIHJldHVybiBgYWItdGVzdC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfWBcbn1cblxuaXQoJ3Nob3VsZCBhbHdheXMgYnVja2V0IGFuIGluYWN0aXZlIHRlc3QgdG8gdGhlIGRlZmF1bHQnLCAoKSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBjcmVhdGVUZXN0TmFtZSgpXG5cbiAgbGV0IGkgPSAwXG4gIHdoaWxlIChpKysgPCAxMDApIHtcbiAgICBjb25zdCB0ZXN0ID0gbmV3IEx1YSh7IHN0b3JlOiBNZW1vcnlTdG9yZSgpIH0pXG4gICAgdGVzdC5kZWZpbmUoW1xuICAgICAge1xuICAgICAgICBuYW1lLFxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICBidWNrZXRzOiB7XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGM6IHtcbiAgICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKVxuICAgIHRlc3QuYXNzaWduKClcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoJ2EnLCB0ZXN0LmFzc2lnbm1lbnRzKClbbmFtZV0pXG4gIH1cbn0pXG5cbml0KCdzaG91bGQgYWx3YXlzIGJ1Y2tldCB0byB0aGUgd2lubmluZyB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCBzdG9yZSA9IE1lbW9yeVN0b3JlKClcbiAgY29uc3QgbmFtZSA9IGNyZWF0ZVRlc3ROYW1lKClcblxuICBjb25zdCBkZWZhdWx0VGVzdHMgPSBbXG4gICAge1xuICAgICAgbmFtZSxcbiAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgYToge1xuICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBiOiB7XG4gICAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgICBjOiB7XG4gICAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgICBkOiB7XG4gICAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdXG5cbiAgbGV0IHRlc3QgPSBuZXcgTHVhKHsgc3RvcmUgfSlcbiAgdGVzdC5kZWZpbmUoZGVmYXVsdFRlc3RzKVxuICB0ZXN0LmFzc2lnbigpXG4gIHRlc3QuYXNzaWduKG5hbWUsICdiJylcblxuICBhc3NlcnQuc3RyaWN0RXF1YWwoJ2InLCB0ZXN0LmFzc2lnbm1lbnRzKClbbmFtZV0pXG5cbiAgZGVmYXVsdFRlc3RzWzBdLmJ1Y2tldHMuYS53aW5uZXIgPSB0cnVlXG4gIHRlc3QgPSBuZXcgTHVhKHsgc3RvcmUgfSlcbiAgdGVzdC5kZWZpbmUoZGVmYXVsdFRlc3RzKVxuICB0ZXN0LmFzc2lnbigpXG4gIGFzc2VydC5zdHJpY3RFcXVhbCgnYScsIHRlc3QuYXNzaWdubWVudHMoKVtuYW1lXSlcbn0pXG5cbml0KCdzaG91bGQgbWFyayBhIHRlc3QgYXMgYWN0aXZlIHdoZW4gYXNzaWduZWQgYW5kIHBlcnNpc3RlZCcsICgpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBNZW1vcnlTdG9yZSgpXG4gIGNvbnN0IG5hbWUgPSBjcmVhdGVUZXN0TmFtZSgpXG5cbiAgY29uc3QgZGVmYXVsdFRlc3RzID0gW1xuICAgIHtcbiAgICAgIG5hbWUsXG4gICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBhOiB7XG4gICAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGI6IHtcbiAgICAgICAgICB3ZWlnaHQ6IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF1cblxuICBsZXQgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZSB9KVxuICB0ZXN0LmRlZmluZShkZWZhdWx0VGVzdHMpXG4gIHRlc3QuYXNzaWduKClcbiAgYXNzZXJ0Lm9rKCF0ZXN0LmRlZmluaXRpb25zKClbMF0uYWN0aXZlKVxuXG4gIHRlc3QuYXNzaWduKG5hbWUsICdiJylcbiAgYXNzZXJ0Lm9rKHRlc3QuZGVmaW5pdGlvbnMoKVswXS5hY3RpdmUpXG5cbiAgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZSB9KVxuICB0ZXN0LmRlZmluZShkZWZhdWx0VGVzdHMpXG5cbiAgdGVzdC5hc3NpZ24oKVxuICBhc3NlcnQub2sodGVzdC5kZWZpbml0aW9ucygpWzBdLmFjdGl2ZSlcbn0pXG5cbml0KCdzaG91bGQgZXh0ZW5kIGFzc2lnbm1lbnRzJywgKCkgPT4ge1xuICBjb25zdCBzdG9yZSA9IE1lbW9yeVN0b3JlKClcbiAgY29uc3QgbmFtZSA9IGNyZWF0ZVRlc3ROYW1lKClcblxuICBjb25zdCBkZWZhdWx0VGVzdHMgPSBbXG4gICAge1xuICAgICAgbmFtZSxcbiAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICBidWNrZXRzOiB7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB3ZWlnaHQ6IDEsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXVxuXG4gIGNvbnN0IHRlc3QgPSBuZXcgTHVhKHsgc3RvcmUgfSlcbiAgdGVzdC5kZWZpbmUoZGVmYXVsdFRlc3RzKVxuICB0ZXN0LmFzc2lnbigpXG4gIHRlc3QuZXh0ZW5kQXNzaWdubWVudHMgPSAoYXNzaWdubWVudHMpID0+IE9iamVjdC5hc3NpZ24oYXNzaWdubWVudHMsIHsgZm9vOiAnYmFyJyB9KVxuICBjb25zdCBhc3NpZ25tZW50cyA9IHRlc3QuYXNzaWdubWVudHMoKVxuICBhc3NlcnQub2sobmFtZSBpbiBhc3NpZ25tZW50cylcbiAgYXNzZXJ0Lm9rKGFzc2lnbm1lbnRzLmZvbyA9PT0gJ2JhcicpXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxTQUFTRyxjQUFjQSxDQUFBLEVBQUc7RUFDeEIsa0JBQUFDLE1BQUEsQ0FBa0JDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBRUFD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
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _chai = require("chai");
|
|
5
|
+
var _memory = _interopRequireDefault(require("../stores/memory"));
|
|
6
|
+
var _lua = _interopRequireDefault(require("../lua"));
|
|
7
|
+
/* eslint no-unused-expressions: 0 */
|
|
8
|
+
|
|
9
|
+
var utils = {
|
|
10
|
+
roughlyEqual: function roughlyEqual(a, b, range) {
|
|
11
|
+
return Math.abs(a - b) < (range || 3);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
it('should create a persistent AB test', function () {
|
|
15
|
+
var passes = 10000;
|
|
16
|
+
var buckets = {
|
|
17
|
+
foo: {
|
|
18
|
+
weight: 5
|
|
19
|
+
},
|
|
20
|
+
bar: {
|
|
21
|
+
weight: 5
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var store = (0, _memory.default)();
|
|
25
|
+
var selected = {};
|
|
26
|
+
for (var i = 0; i < passes; i++) {
|
|
27
|
+
var test = new _lua.default({
|
|
28
|
+
store: store
|
|
29
|
+
});
|
|
30
|
+
test.define({
|
|
31
|
+
name: 'test-2',
|
|
32
|
+
buckets: buckets
|
|
33
|
+
});
|
|
34
|
+
test.assign();
|
|
35
|
+
var buckets2 = test.assignments();
|
|
36
|
+
var bucket = buckets2['test-2'];
|
|
37
|
+
if (!selected[bucket]) {
|
|
38
|
+
selected[bucket] = 0;
|
|
39
|
+
}
|
|
40
|
+
selected[bucket]++;
|
|
41
|
+
}
|
|
42
|
+
var keys = Object.keys(selected);
|
|
43
|
+
(0, _chai.expect)(selected[keys[0]]).to.equal(passes);
|
|
44
|
+
});
|
|
45
|
+
it('should create an equally weighted AB test', function () {
|
|
46
|
+
var passes = 10000;
|
|
47
|
+
var selected = {};
|
|
48
|
+
for (var i = 0; i < passes; i++) {
|
|
49
|
+
var test = new _lua.default({
|
|
50
|
+
store: {
|
|
51
|
+
get: function get() {},
|
|
52
|
+
set: function set() {},
|
|
53
|
+
isSupported: function isSupported() {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
test.define({
|
|
59
|
+
name: 'test-3',
|
|
60
|
+
buckets: {
|
|
61
|
+
foo: {
|
|
62
|
+
weight: 1
|
|
63
|
+
},
|
|
64
|
+
bar: {
|
|
65
|
+
weight: 1
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
test.assign();
|
|
70
|
+
var buckets = test.assignments();
|
|
71
|
+
var bucket = buckets['test-3'];
|
|
72
|
+
if (!selected[bucket]) {
|
|
73
|
+
selected[bucket] = 0;
|
|
74
|
+
}
|
|
75
|
+
selected[bucket]++;
|
|
76
|
+
}
|
|
77
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.foo / passes * 100, 50)).to.equal(true);
|
|
78
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.bar / passes * 100, 50)).to.equal(true);
|
|
79
|
+
});
|
|
80
|
+
it('should create an unequally weighted AB test', function () {
|
|
81
|
+
var passes = 10000;
|
|
82
|
+
var selected = {};
|
|
83
|
+
for (var i = 0; i < passes; i++) {
|
|
84
|
+
var test = new _lua.default({
|
|
85
|
+
store: {
|
|
86
|
+
get: function get() {},
|
|
87
|
+
set: function set() {},
|
|
88
|
+
isSupported: function isSupported() {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
test.define({
|
|
94
|
+
name: 'test-4',
|
|
95
|
+
buckets: {
|
|
96
|
+
foo: {
|
|
97
|
+
weight: 3
|
|
98
|
+
},
|
|
99
|
+
bar: {
|
|
100
|
+
weight: 1
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
test.assign();
|
|
105
|
+
var buckets = test.assignments();
|
|
106
|
+
var bucket = buckets['test-4'];
|
|
107
|
+
if (!selected[bucket]) {
|
|
108
|
+
selected[bucket] = 0;
|
|
109
|
+
}
|
|
110
|
+
selected[bucket]++;
|
|
111
|
+
}
|
|
112
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.foo / passes * 100, 75)).to.equal(true);
|
|
113
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.bar / passes * 100, 25)).to.equal(true);
|
|
114
|
+
});
|
|
115
|
+
it('should create an unequally weighted ABCD test', function () {
|
|
116
|
+
var passes = 10000;
|
|
117
|
+
var selected = {};
|
|
118
|
+
for (var i = 0; i < passes; i++) {
|
|
119
|
+
var test = new _lua.default({
|
|
120
|
+
store: {
|
|
121
|
+
get: function get() {},
|
|
122
|
+
set: function set() {},
|
|
123
|
+
isSupported: function isSupported() {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
test.define({
|
|
129
|
+
name: 'test-5',
|
|
130
|
+
buckets: {
|
|
131
|
+
foo: {
|
|
132
|
+
weight: 3
|
|
133
|
+
},
|
|
134
|
+
bar: {
|
|
135
|
+
weight: 5
|
|
136
|
+
},
|
|
137
|
+
baz: {
|
|
138
|
+
weight: 2
|
|
139
|
+
},
|
|
140
|
+
wat: {
|
|
141
|
+
weight: 8
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
test.assign();
|
|
146
|
+
var buckets = test.assignments();
|
|
147
|
+
var bucket = buckets['test-5'];
|
|
148
|
+
if (!selected[bucket]) {
|
|
149
|
+
selected[bucket] = 0;
|
|
150
|
+
}
|
|
151
|
+
selected[bucket]++;
|
|
152
|
+
}
|
|
153
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.foo / passes * 100, 16)).to.equal(true);
|
|
154
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.bar / passes * 100, 27)).to.equal(true);
|
|
155
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.baz / passes * 100, 11)).to.equal(true);
|
|
156
|
+
(0, _chai.expect)(utils.roughlyEqual(selected.wat / passes * 100, 44)).to.equal(true);
|
|
157
|
+
});
|
|
158
|
+
it('should create a test with 0% weighted buckets', function () {
|
|
159
|
+
var passes = 10;
|
|
160
|
+
var selected = {};
|
|
161
|
+
for (var i = 0; i < passes; i++) {
|
|
162
|
+
var test = new _lua.default({
|
|
163
|
+
store: {
|
|
164
|
+
get: function get() {},
|
|
165
|
+
set: function set() {},
|
|
166
|
+
isSupported: function isSupported() {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
test.define({
|
|
172
|
+
name: 'test-6',
|
|
173
|
+
buckets: {
|
|
174
|
+
foo: {
|
|
175
|
+
weight: 0
|
|
176
|
+
},
|
|
177
|
+
bar: {
|
|
178
|
+
weight: 0
|
|
179
|
+
},
|
|
180
|
+
baz: {
|
|
181
|
+
weight: 1
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
test.assign();
|
|
186
|
+
var buckets = test.assignments();
|
|
187
|
+
var bucket = buckets['test-6'];
|
|
188
|
+
if (!selected[bucket]) {
|
|
189
|
+
selected[bucket] = 0;
|
|
190
|
+
}
|
|
191
|
+
selected[bucket]++;
|
|
192
|
+
}
|
|
193
|
+
(0, _chai.expect)(selected.foo).to.be.undefined;
|
|
194
|
+
(0, _chai.expect)(selected.bar).to.be.undefined;
|
|
195
|
+
(0, _chai.expect)(selected.baz).to.equal(passes);
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hhaSIsInJlcXVpcmUiLCJfbWVtb3J5IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sdWEiLCJ1dGlscyIsInJvdWdobHlFcXVhbCIsImEiLCJiIiwicmFuZ2UiLCJNYXRoIiwiYWJzIiwiaXQiLCJwYXNzZXMiLCJidWNrZXRzIiwiZm9vIiwid2VpZ2h0IiwiYmFyIiwic3RvcmUiLCJNZW1vcnlTdG9yZSIsInNlbGVjdGVkIiwiaSIsInRlc3QiLCJMdWEiLCJkZWZpbmUiLCJuYW1lIiwiYXNzaWduIiwiYnVja2V0czIiLCJhc3NpZ25tZW50cyIsImJ1Y2tldCIsImtleXMiLCJPYmplY3QiLCJleHBlY3QiLCJ0byIsImVxdWFsIiwiZ2V0Iiwic2V0IiwiaXNTdXBwb3J0ZWQiLCJiYXoiLCJ3YXQiLCJiZSIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vb3JpZ2luYWwtcm91Z2hseS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IDAgKi9cbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknXG5cbmltcG9ydCBNZW1vcnlTdG9yZSBmcm9tICcuLi9zdG9yZXMvbWVtb3J5J1xuaW1wb3J0IEx1YSBmcm9tICcuLi9sdWEnXG5cbmNvbnN0IHV0aWxzID0ge1xuICByb3VnaGx5RXF1YWwoYSwgYiwgcmFuZ2UpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDwgKHJhbmdlIHx8IDMpXG4gIH0sXG59XG5cbml0KCdzaG91bGQgY3JlYXRlIGEgcGVyc2lzdGVudCBBQiB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCBwYXNzZXMgPSAxMDAwMFxuICBjb25zdCBidWNrZXRzID0ge1xuICAgIGZvbzogeyB3ZWlnaHQ6IDUgfSxcbiAgICBiYXI6IHsgd2VpZ2h0OiA1IH0sXG4gIH1cblxuICBjb25zdCBzdG9yZSA9IE1lbW9yeVN0b3JlKClcbiAgY29uc3Qgc2VsZWN0ZWQgPSB7fVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhc3NlczsgaSsrKSB7XG4gICAgY29uc3QgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZSB9KVxuICAgIHRlc3QuZGVmaW5lKHtcbiAgICAgIG5hbWU6ICd0ZXN0LTInLFxuICAgICAgYnVja2V0cyxcbiAgICB9KVxuICAgIHRlc3QuYXNzaWduKClcbiAgICBjb25zdCBidWNrZXRzMiA9IHRlc3QuYXNzaWdubWVudHMoKVxuICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHMyWyd0ZXN0LTInXVxuXG4gICAgaWYgKCFzZWxlY3RlZFtidWNrZXRdKSB7XG4gICAgICBzZWxlY3RlZFtidWNrZXRdID0gMFxuICAgIH1cbiAgICBzZWxlY3RlZFtidWNrZXRdKytcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZClcbiAgZXhwZWN0KHNlbGVjdGVkW2tleXNbMF1dKS50by5lcXVhbChwYXNzZXMpXG59KVxuXG5pdCgnc2hvdWxkIGNyZWF0ZSBhbiBlcXVhbGx5IHdlaWdodGVkIEFCIHRlc3QnLCAoKSA9PiB7XG4gIGNvbnN0IHBhc3NlcyA9IDEwMDAwXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSB7fVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhc3NlczsgaSsrKSB7XG4gICAgY29uc3QgdGVzdCA9IG5ldyBMdWEoe1xuICAgICAgc3RvcmU6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7IH0sXG4gICAgICAgIHNldDogKCkgPT4geyB9LFxuICAgICAgICBpc1N1cHBvcnRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHRlc3QuZGVmaW5lKHtcbiAgICAgIG5hbWU6ICd0ZXN0LTMnLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBmb286IHsgd2VpZ2h0OiAxIH0sXG4gICAgICAgIGJhcjogeyB3ZWlnaHQ6IDEgfSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHRlc3QuYXNzaWduKClcbiAgICBjb25zdCBidWNrZXRzID0gdGVzdC5hc3NpZ25tZW50cygpXG4gICAgY29uc3QgYnVja2V0ID0gYnVja2V0c1sndGVzdC0zJ11cblxuICAgIGlmICghc2VsZWN0ZWRbYnVja2V0XSkge1xuICAgICAgc2VsZWN0ZWRbYnVja2V0XSA9IDBcbiAgICB9XG4gICAgc2VsZWN0ZWRbYnVja2V0XSsrXG4gIH1cblxuICBleHBlY3QodXRpbHMucm91Z2hseUVxdWFsKChzZWxlY3RlZC5mb28gLyBwYXNzZXMpICogMTAwLCA1MCkpLnRvLmVxdWFsKHRydWUpXG4gIGV4cGVjdCh1dGlscy5yb3VnaGx5RXF1YWwoKHNlbGVjdGVkLmJhciAvIHBhc3NlcykgKiAxMDAsIDUwKSkudG8uZXF1YWwodHJ1ZSlcbn0pXG5cbml0KCdzaG91bGQgY3JlYXRlIGFuIHVuZXF1YWxseSB3ZWlnaHRlZCBBQiB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCBwYXNzZXMgPSAxMDAwMFxuXG4gIGNvbnN0IHNlbGVjdGVkID0ge31cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXNzZXM7IGkrKykge1xuICAgIGNvbnN0IHRlc3QgPSBuZXcgTHVhKHtcbiAgICAgIHN0b3JlOiB7XG4gICAgICAgIGdldDogKCkgPT4geyB9LFxuICAgICAgICBzZXQ6ICgpID0+IHsgfSxcbiAgICAgICAgaXNTdXBwb3J0ZWQ6ICgpID0+IHRydWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICB0ZXN0LmRlZmluZSh7XG4gICAgICBuYW1lOiAndGVzdC00JyxcbiAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgZm9vOiB7IHdlaWdodDogMyB9LFxuICAgICAgICBiYXI6IHsgd2VpZ2h0OiAxIH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICB0ZXN0LmFzc2lnbigpXG4gICAgY29uc3QgYnVja2V0cyA9IHRlc3QuYXNzaWdubWVudHMoKVxuICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHNbJ3Rlc3QtNCddXG5cbiAgICBpZiAoIXNlbGVjdGVkW2J1Y2tldF0pIHtcbiAgICAgIHNlbGVjdGVkW2J1Y2tldF0gPSAwXG4gICAgfVxuICAgIHNlbGVjdGVkW2J1Y2tldF0rK1xuICB9XG5cbiAgZXhwZWN0KHV0aWxzLnJvdWdobHlFcXVhbCgoc2VsZWN0ZWQuZm9vIC8gcGFzc2VzKSAqIDEwMCwgNzUpKS50by5lcXVhbCh0cnVlKVxuICBleHBlY3QodXRpbHMucm91Z2hseUVxdWFsKChzZWxlY3RlZC5iYXIgLyBwYXNzZXMpICogMTAwLCAyNSkpLnRvLmVxdWFsKHRydWUpXG59KVxuXG5pdCgnc2hvdWxkIGNyZWF0ZSBhbiB1bmVxdWFsbHkgd2VpZ2h0ZWQgQUJDRCB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCBwYXNzZXMgPSAxMDAwMFxuXG4gIGNvbnN0IHNlbGVjdGVkID0ge31cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXNzZXM7IGkrKykge1xuICAgIGNvbnN0IHRlc3QgPSBuZXcgTHVhKHtcbiAgICAgIHN0b3JlOiB7XG4gICAgICAgIGdldDogKCkgPT4geyB9LFxuICAgICAgICBzZXQ6ICgpID0+IHsgfSxcbiAgICAgICAgaXNTdXBwb3J0ZWQ6ICgpID0+IHRydWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICB0ZXN0LmRlZmluZSh7XG4gICAgICBuYW1lOiAndGVzdC01JyxcbiAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgZm9vOiB7IHdlaWdodDogMyB9LFxuICAgICAgICBiYXI6IHsgd2VpZ2h0OiA1IH0sXG4gICAgICAgIGJhejogeyB3ZWlnaHQ6IDIgfSxcbiAgICAgICAgd2F0OiB7IHdlaWdodDogOCB9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgdGVzdC5hc3NpZ24oKVxuICAgIGNvbnN0IGJ1Y2tldHMgPSB0ZXN0LmFzc2lnbm1lbnRzKClcbiAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzWyd0ZXN0LTUnXVxuXG4gICAgaWYgKCFzZWxlY3RlZFtidWNrZXRdKSB7XG4gICAgICBzZWxlY3RlZFtidWNrZXRdID0gMFxuICAgIH1cbiAgICBzZWxlY3RlZFtidWNrZXRdKytcbiAgfVxuXG4gIGV4cGVjdCh1dGlscy5yb3VnaGx5RXF1YWwoKHNlbGVjdGVkLmZvbyAvIHBhc3NlcykgKiAxMDAsIDE2KSkudG8uZXF1YWwodHJ1ZSlcbiAgZXhwZWN0KHV0aWxzLnJvdWdobHlFcXVhbCgoc2VsZWN0ZWQuYmFyIC8gcGFzc2VzKSAqIDEwMCwgMjcpKS50by5lcXVhbCh0cnVlKVxuICBleHBlY3QodXRpbHMucm91Z2hseUVxdWFsKChzZWxlY3RlZC5iYXogLyBwYXNzZXMpICogMTAwLCAxMSkpLnRvLmVxdWFsKHRydWUpXG4gIGV4cGVjdCh1dGlscy5yb3VnaGx5RXF1YWwoKHNlbGVjdGVkLndhdCAvIHBhc3NlcykgKiAxMDAsIDQ0KSkudG8uZXF1YWwodHJ1ZSlcbn0pXG5cbml0KCdzaG91bGQgY3JlYXRlIGEgdGVzdCB3aXRoIDAlIHdlaWdodGVkIGJ1Y2tldHMnLCAoKSA9PiB7XG4gIGNvbnN0IHBhc3NlcyA9IDEwXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSB7fVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhc3NlczsgaSsrKSB7XG4gICAgY29uc3QgdGVzdCA9IG5ldyBMdWEoe1xuICAgICAgc3RvcmU6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7IH0sXG4gICAgICAgIHNldDogKCkgPT4geyB9LFxuICAgICAgICBpc1N1cHBvcnRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHRlc3QuZGVmaW5lKHtcbiAgICAgIG5hbWU6ICd0ZXN0LTYnLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBmb286IHsgd2VpZ2h0OiAwIH0sXG4gICAgICAgIGJhcjogeyB3ZWlnaHQ6IDAgfSxcbiAgICAgICAgYmF6OiB7IHdlaWdodDogMSB9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgdGVzdC5hc3NpZ24oKVxuICAgIGNvbnN0IGJ1Y2tldHMgPSB0ZXN0LmFzc2lnbm1lbnRzKClcbiAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzWyd0ZXN0LTYnXVxuXG4gICAgaWYgKCFzZWxlY3RlZFtidWNrZXRdKSB7XG4gICAgICBzZWxlY3RlZFtidWNrZXRdID0gMFxuICAgIH1cbiAgICBzZWxlY3RlZFtidWNrZXRdKytcbiAgfVxuXG4gIGV4cGVjdChzZWxlY3RlZC5mb28pLnRvLmJlLnVuZGVmaW5lZFxuICBleHBlY3Qoc2VsZWN0ZWQuYmFyKS50by5iZS51bmRlZmluZWRcbiAgZXhwZWN0KHNlbGVjdGVkLmJheikudG8uZXF1YWwocGFzc2VzKVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsT0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsSUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBSkE7O0FBTUEsSUFBTUksS0FBSyxHQUFHO0VBQ1pDLFlBQVksV0FBWkEsWUFBWUEsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLEtBQUssRUFBRTtJQUN4QixPQUFPQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0osQ0FBQyxHQUFHQyxDQUFDLENBQUMsSUFBSUMsS0FBSyxJQUFJLENBQUMsQ0FBQztFQUN2QztBQUNGLENBQUM7QUFFREcsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07RUFDN0MsSUFBTUMsTUFBTSxHQUFHLEtBQUs7RUFDcEIsSUFBTUMsT0FBTyxHQUFHO0lBQ2RDLEdBQUcsRUFBRTtNQUFFQyxNQUFNLEVBQUU7SUFBRSxDQUFDO0lBQ2xCQyxHQUFHLEVBQUU7TUFBRUQsTUFBTSxFQUFFO0lBQUU7RUFDbkIsQ0FBQztFQUVELElBQU1FLEtBQUssR0FBRyxJQUFBQyxlQUFXLEVBQUMsQ0FBQztFQUMzQixJQUFNQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQ25CLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHUixNQUFNLEVBQUVRLENBQUMsRUFBRSxFQUFFO0lBQy9CLElBQU1DLElBQUksR0FBRyxJQUFJQyxZQUFHLENBQUM7TUFBRUwsS0FBSyxFQUFM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
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _chai = require("chai");
|
|
5
|
+
var _memory = _interopRequireDefault(require("../stores/memory"));
|
|
6
|
+
var _lua = _interopRequireDefault(require("../lua"));
|
|
7
|
+
/* eslint no-unused-expressions: 0 */
|
|
8
|
+
|
|
9
|
+
it('should create an AB test', function () {
|
|
10
|
+
var name = 'test-1';
|
|
11
|
+
var test = new _lua.default({
|
|
12
|
+
store: (0, _memory.default)()
|
|
13
|
+
});
|
|
14
|
+
test.define({
|
|
15
|
+
name: name,
|
|
16
|
+
buckets: {
|
|
17
|
+
foo: {
|
|
18
|
+
weight: 1
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
test.assign();
|
|
23
|
+
var info = test.assignments();
|
|
24
|
+
(0, _chai.expect)(info[name]).to.equal('foo');
|
|
25
|
+
(0, _chai.expect)(document.body.classList.contains("".concat(name, "--foo"))).to.equal(true);
|
|
26
|
+
});
|
|
27
|
+
it('should create multiple AB tests', function () {
|
|
28
|
+
var test = new _lua.default({
|
|
29
|
+
store: (0, _memory.default)()
|
|
30
|
+
});
|
|
31
|
+
test.define([{
|
|
32
|
+
name: 'test-multi-1',
|
|
33
|
+
buckets: {
|
|
34
|
+
foo: {
|
|
35
|
+
weight: 1
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, {
|
|
39
|
+
name: 'test-multi-2',
|
|
40
|
+
buckets: {
|
|
41
|
+
bar: {
|
|
42
|
+
weight: 1
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}]);
|
|
46
|
+
test.assign();
|
|
47
|
+
var info = test.assignments();
|
|
48
|
+
(0, _chai.expect)(info['test-multi-1']).to.equal('foo');
|
|
49
|
+
(0, _chai.expect)(info['test-multi-2']).to.equal('bar');
|
|
50
|
+
(0, _chai.expect)(document.body.classList.contains('test-multi-1--foo')).to.equal(true);
|
|
51
|
+
(0, _chai.expect)(document.body.classList.contains('test-multi-2--bar')).to.equal(true);
|
|
52
|
+
});
|
|
53
|
+
it('should assign a bucket to a particular AB test', function () {
|
|
54
|
+
var test = new _lua.default({
|
|
55
|
+
store: (0, _memory.default)()
|
|
56
|
+
});
|
|
57
|
+
test.define([{
|
|
58
|
+
name: 'test-multi-3',
|
|
59
|
+
buckets: {
|
|
60
|
+
foo: {
|
|
61
|
+
weight: 1
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
name: 'test-multi-4',
|
|
66
|
+
buckets: {
|
|
67
|
+
bar: {
|
|
68
|
+
weight: 1
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}, {
|
|
72
|
+
name: 'test-multi-5',
|
|
73
|
+
buckets: {
|
|
74
|
+
baz: {
|
|
75
|
+
weight: 1
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}]);
|
|
79
|
+
test.assign('test-multi-4');
|
|
80
|
+
var info = test.assignments();
|
|
81
|
+
(0, _chai.expect)(Object.keys(info).length).to.equal(1);
|
|
82
|
+
(0, _chai.expect)(info['test-multi-4']).to.equal('bar');
|
|
83
|
+
(0, _chai.expect)(document.body.classList.contains('test-multi-4--bar')).to.equal(true);
|
|
84
|
+
});
|
|
85
|
+
it('should assign a particular bucket to a particular AB test', function () {
|
|
86
|
+
var test = new _lua.default({
|
|
87
|
+
store: (0, _memory.default)()
|
|
88
|
+
});
|
|
89
|
+
test.define([{
|
|
90
|
+
name: 'test-multi-6',
|
|
91
|
+
buckets: {
|
|
92
|
+
foo: {
|
|
93
|
+
weight: 4
|
|
94
|
+
},
|
|
95
|
+
bar: {
|
|
96
|
+
weight: 0
|
|
97
|
+
},
|
|
98
|
+
baz: {
|
|
99
|
+
weight: 9
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}]);
|
|
103
|
+
test.assign('test-multi-6', 'bar');
|
|
104
|
+
var info = test.assignments();
|
|
105
|
+
(0, _chai.expect)(Object.keys(info).length).to.equal(1);
|
|
106
|
+
(0, _chai.expect)(info['test-multi-6']).to.equal('bar');
|
|
107
|
+
(0, _chai.expect)(document.body.classList.contains('test-multi-6--bar')).to.equal(true);
|
|
108
|
+
});
|
|
109
|
+
it('should assign a bucket to a particular AB test with prior assignations', function () {
|
|
110
|
+
var test = new _lua.default({
|
|
111
|
+
store: (0, _memory.default)()
|
|
112
|
+
});
|
|
113
|
+
test.define([{
|
|
114
|
+
name: 'test-multi-7',
|
|
115
|
+
buckets: {
|
|
116
|
+
a: {
|
|
117
|
+
weight: 1
|
|
118
|
+
},
|
|
119
|
+
b: {
|
|
120
|
+
weight: 0
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}, {
|
|
124
|
+
name: 'test-multi-8',
|
|
125
|
+
buckets: {
|
|
126
|
+
c: {
|
|
127
|
+
weight: 1
|
|
128
|
+
},
|
|
129
|
+
d: {
|
|
130
|
+
weight: 0
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}, {
|
|
134
|
+
name: 'test-multi-9',
|
|
135
|
+
buckets: {
|
|
136
|
+
e: {
|
|
137
|
+
weight: 1
|
|
138
|
+
},
|
|
139
|
+
f: {
|
|
140
|
+
weight: 0
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}]);
|
|
144
|
+
test.assign();
|
|
145
|
+
var info = test.assignments();
|
|
146
|
+
(0, _chai.expect)(Object.keys(info).length).to.equal(3);
|
|
147
|
+
(0, _chai.expect)(info['test-multi-8']).to.equal('c');
|
|
148
|
+
test.assign('test-multi-8', 'd');
|
|
149
|
+
info = test.assignments();
|
|
150
|
+
(0, _chai.expect)(Object.keys(info).length).to.equal(3);
|
|
151
|
+
(0, _chai.expect)(info['test-multi-8']).to.equal('d');
|
|
152
|
+
});
|
|
153
|
+
it('should assign a bucket to a test, then remove it', function () {
|
|
154
|
+
var test = new _lua.default({
|
|
155
|
+
store: (0, _memory.default)()
|
|
156
|
+
});
|
|
157
|
+
test.define([{
|
|
158
|
+
name: 'test-to-remove-bucket-for',
|
|
159
|
+
buckets: {
|
|
160
|
+
foo: {
|
|
161
|
+
weight: 1
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}]);
|
|
165
|
+
test.assign();
|
|
166
|
+
var info = test.assignments();
|
|
167
|
+
(0, _chai.expect)(info['test-to-remove-bucket-for']).to.equal('foo');
|
|
168
|
+
(0, _chai.expect)(document.body.classList.contains('test-to-remove-bucket-for--foo')).to.equal(true);
|
|
169
|
+
test.assign('test-to-remove-bucket-for', null);
|
|
170
|
+
var updatedInfo = test.assignments();
|
|
171
|
+
(0, _chai.expect)(updatedInfo['test-to-remove-bucket-for']).to.equal(undefined);
|
|
172
|
+
(0, _chai.expect)(document.body.classList.contains('test-to-remove-bucket-for--foo')).to.equal(false);
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hhaSIsInJlcXVpcmUiLCJfbWVtb3J5IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9sdWEiLCJpdCIsIm5hbWUiLCJ0ZXN0IiwiTHVhIiwic3RvcmUiLCJNZW1vcnlTdG9yZSIsImRlZmluZSIsImJ1Y2tldHMiLCJmb28iLCJ3ZWlnaHQiLCJhc3NpZ24iLCJpbmZvIiwiYXNzaWdubWVudHMiLCJleHBlY3QiLCJ0byIsImVxdWFsIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjb25jYXQiLCJiYXIiLCJiYXoiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwidXBkYXRlZEluZm8iLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvX190ZXN0c19fL29yaWdpbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuLyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogMCAqL1xuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSdcblxuaW1wb3J0IE1lbW9yeVN0b3JlIGZyb20gJy4uL3N0b3Jlcy9tZW1vcnknXG5pbXBvcnQgTHVhIGZyb20gJy4uL2x1YSdcblxuaXQoJ3Nob3VsZCBjcmVhdGUgYW4gQUIgdGVzdCcsICgpID0+IHtcbiAgY29uc3QgbmFtZSA9ICd0ZXN0LTEnXG5cbiAgY29uc3QgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZTogTWVtb3J5U3RvcmUoKSB9KVxuICB0ZXN0LmRlZmluZSh7XG4gICAgbmFtZSxcbiAgICBidWNrZXRzOiB7XG4gICAgICBmb286IHtcbiAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxuICB0ZXN0LmFzc2lnbigpXG4gIGNvbnN0IGluZm8gPSB0ZXN0LmFzc2lnbm1lbnRzKClcblxuICBleHBlY3QoaW5mb1tuYW1lXSkudG8uZXF1YWwoJ2ZvbycpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhgJHtuYW1lfS0tZm9vYCkpLnRvLmVxdWFsKHRydWUpXG59KVxuXG5pdCgnc2hvdWxkIGNyZWF0ZSBtdWx0aXBsZSBBQiB0ZXN0cycsICgpID0+IHtcbiAgY29uc3QgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZTogTWVtb3J5U3RvcmUoKSB9KVxuXG4gIHRlc3QuZGVmaW5lKFtcbiAgICB7XG4gICAgICBuYW1lOiAndGVzdC1tdWx0aS0xJyxcbiAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgZm9vOiB7IHdlaWdodDogMSB9LFxuICAgICAgfSxcbiAgICB9LCB7XG4gICAgICBuYW1lOiAndGVzdC1tdWx0aS0yJyxcbiAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgYmFyOiB7IHdlaWdodDogMSB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdKVxuICB0ZXN0LmFzc2lnbigpXG4gIGNvbnN0IGluZm8gPSB0ZXN0LmFzc2lnbm1lbnRzKClcblxuICBleHBlY3QoaW5mb1sndGVzdC1tdWx0aS0xJ10pLnRvLmVxdWFsKCdmb28nKVxuICBleHBlY3QoaW5mb1sndGVzdC1tdWx0aS0yJ10pLnRvLmVxdWFsKCdiYXInKVxuICBleHBlY3QoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3Rlc3QtbXVsdGktMS0tZm9vJykpLnRvLmVxdWFsKHRydWUpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGVzdC1tdWx0aS0yLS1iYXInKSkudG8uZXF1YWwodHJ1ZSlcbn0pXG5cbml0KCdzaG91bGQgYXNzaWduIGEgYnVja2V0IHRvIGEgcGFydGljdWxhciBBQiB0ZXN0JywgKCkgPT4ge1xuICBjb25zdCB0ZXN0ID0gbmV3IEx1YSh7IHN0b3JlOiBNZW1vcnlTdG9yZSgpIH0pXG5cbiAgdGVzdC5kZWZpbmUoW1xuICAgIHtcbiAgICAgIG5hbWU6ICd0ZXN0LW11bHRpLTMnLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBmb286IHsgd2VpZ2h0OiAxIH0sXG4gICAgICB9LFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXN0LW11bHRpLTQnLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBiYXI6IHsgd2VpZ2h0OiAxIH0sXG4gICAgICB9LFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXN0LW11bHRpLTUnLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBiYXo6IHsgd2VpZ2h0OiAxIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pXG4gIHRlc3QuYXNzaWduKCd0ZXN0LW11bHRpLTQnKVxuICBjb25zdCBpbmZvID0gdGVzdC5hc3NpZ25tZW50cygpXG5cbiAgZXhwZWN0KE9iamVjdC5rZXlzKGluZm8pLmxlbmd0aCkudG8uZXF1YWwoMSlcbiAgZXhwZWN0KGluZm9bJ3Rlc3QtbXVsdGktNCddKS50by5lcXVhbCgnYmFyJylcbiAgZXhwZWN0KGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd0ZXN0LW11bHRpLTQtLWJhcicpKS50by5lcXVhbCh0cnVlKVxufSlcblxuaXQoJ3Nob3VsZCBhc3NpZ24gYSBwYXJ0aWN1bGFyIGJ1Y2tldCB0byBhIHBhcnRpY3VsYXIgQUIgdGVzdCcsICgpID0+IHtcbiAgY29uc3QgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZTogTWVtb3J5U3RvcmUoKSB9KVxuICB0ZXN0LmRlZmluZShbXG4gICAge1xuICAgICAgbmFtZTogJ3Rlc3QtbXVsdGktNicsXG4gICAgICBidWNrZXRzOiB7XG4gICAgICAgIGZvbzogeyB3ZWlnaHQ6IDQgfSxcbiAgICAgICAgYmFyOiB7IHdlaWdodDogMCB9LFxuICAgICAgICBiYXo6IHsgd2VpZ2h0OiA5IH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pXG4gIHRlc3QuYXNzaWduKCd0ZXN0LW11bHRpLTYnLCAnYmFyJylcbiAgY29uc3QgaW5mbyA9IHRlc3QuYXNzaWdubWVudHMoKVxuXG4gIGV4cGVjdChPYmplY3Qua2V5cyhpbmZvKS5sZW5ndGgpLnRvLmVxdWFsKDEpXG4gIGV4cGVjdChpbmZvWyd0ZXN0LW11bHRpLTYnXSkudG8uZXF1YWwoJ2JhcicpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGVzdC1tdWx0aS02LS1iYXInKSkudG8uZXF1YWwodHJ1ZSlcbn0pXG5cbml0KCdzaG91bGQgYXNzaWduIGEgYnVja2V0IHRvIGEgcGFydGljdWxhciBBQiB0ZXN0IHdpdGggcHJpb3IgYXNzaWduYXRpb25zJywgKCkgPT4ge1xuICBjb25zdCB0ZXN0ID0gbmV3IEx1YSh7IHN0b3JlOiBNZW1vcnlTdG9yZSgpIH0pXG4gIHRlc3QuZGVmaW5lKFtcbiAgICB7XG4gICAgICBuYW1lOiAndGVzdC1tdWx0aS03JyxcbiAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgYTogeyB3ZWlnaHQ6IDEgfSxcbiAgICAgICAgYjogeyB3ZWlnaHQ6IDAgfSxcbiAgICAgIH0sXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3Rlc3QtbXVsdGktOCcsXG4gICAgICBidWNrZXRzOiB7XG4gICAgICAgIGM6IHsgd2VpZ2h0OiAxIH0sXG4gICAgICAgIGQ6IHsgd2VpZ2h0OiAwIH0sXG4gICAgICB9LFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICd0ZXN0LW11bHRpLTknLFxuICAgICAgYnVja2V0czoge1xuICAgICAgICBlOiB7IHdlaWdodDogMSB9LFxuICAgICAgICBmOiB7IHdlaWdodDogMCB9LFxuICAgICAgfSxcbiAgICB9LFxuICBdKVxuICB0ZXN0LmFzc2lnbigpXG4gIGxldCBpbmZvID0gdGVzdC5hc3NpZ25tZW50cygpXG5cbiAgZXhwZWN0KE9iamVjdC5rZXlzKGluZm8pLmxlbmd0aCkudG8uZXF1YWwoMylcbiAgZXhwZWN0KGluZm9bJ3Rlc3QtbXVsdGktOCddKS50by5lcXVhbCgnYycpXG5cbiAgdGVzdC5hc3NpZ24oJ3Rlc3QtbXVsdGktOCcsICdkJylcbiAgaW5mbyA9IHRlc3QuYXNzaWdubWVudHMoKVxuXG4gIGV4cGVjdChPYmplY3Qua2V5cyhpbmZvKS5sZW5ndGgpLnRvLmVxdWFsKDMpXG4gIGV4cGVjdChpbmZvWyd0ZXN0LW11bHRpLTgnXSkudG8uZXF1YWwoJ2QnKVxufSlcblxuaXQoJ3Nob3VsZCBhc3NpZ24gYSBidWNrZXQgdG8gYSB0ZXN0LCB0aGVuIHJlbW92ZSBpdCcsICgpID0+IHtcbiAgY29uc3QgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZTogTWVtb3J5U3RvcmUoKSB9KVxuICB0ZXN0LmRlZmluZShbXG4gICAge1xuICAgICAgbmFtZTogJ3Rlc3QtdG8tcmVtb3ZlLWJ1Y2tldC1mb3InLFxuICAgICAgYnVja2V0czogeyBmb286IHsgd2VpZ2h0OiAxIH0gfSxcbiAgICB9LFxuICBdKVxuICB0ZXN0LmFzc2lnbigpXG4gIGNvbnN0IGluZm8gPSB0ZXN0LmFzc2lnbm1lbnRzKClcbiAgZXhwZWN0KGluZm9bJ3Rlc3QtdG8tcmVtb3ZlLWJ1Y2tldC1mb3InXSkudG8uZXF1YWwoJ2ZvbycpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGVzdC10by1yZW1vdmUtYnVja2V0LWZvci0tZm9vJykpLnRvLmVxdWFsKHRydWUpXG5cbiAgdGVzdC5hc3NpZ24oJ3Rlc3QtdG8tcmVtb3ZlLWJ1Y2tldC1mb3InLCBudWxsKVxuXG4gIGNvbnN0IHVwZGF0ZWRJbmZvID0gdGVzdC5hc3NpZ25tZW50cygpXG4gIGV4cGVjdCh1cGRhdGVkSW5mb1sndGVzdC10by1yZW1vdmUtYnVja2V0LWZvciddKS50by5lcXVhbCh1bmRlZmluZWQpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGVzdC10by1yZW1vdmUtYnVja2V0LWZvci0tZm9vJykpLnRvLmVxdWFsKGZhbHNlKVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsT0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsSUFBQSxHQUFBRCxzQkFBQSxDQUFB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
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
5
|
+
var _memory = _interopRequireDefault(require("../stores/memory"));
|
|
6
|
+
var _lua = _interopRequireDefault(require("../lua"));
|
|
7
|
+
it('should keep the same buckets if .assign() is ran twice', function () {
|
|
8
|
+
var test = new _lua.default({
|
|
9
|
+
store: (0, _memory.default)()
|
|
10
|
+
});
|
|
11
|
+
test.define([{
|
|
12
|
+
name: '1',
|
|
13
|
+
buckets: {
|
|
14
|
+
a: {
|
|
15
|
+
weight: 1,
|
|
16
|
+
default: true
|
|
17
|
+
},
|
|
18
|
+
b: {
|
|
19
|
+
weight: 1
|
|
20
|
+
},
|
|
21
|
+
c: {
|
|
22
|
+
weight: 1
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}]);
|
|
26
|
+
test.assign();
|
|
27
|
+
var buckets = test.definitions();
|
|
28
|
+
for (var i = 0; i < 100; i++) {
|
|
29
|
+
test.assign();
|
|
30
|
+
_assert.default.deepStrictEqual(buckets, test.definitions());
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// https://github.com/dollarshaveclub/lua/issues/27
|
|
35
|
+
it('should randomly assign when doing .assign()', function () {
|
|
36
|
+
// Set up our test API
|
|
37
|
+
var test = new _lua.default({
|
|
38
|
+
store: (0, _memory.default)()
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Define a test
|
|
42
|
+
test.define({
|
|
43
|
+
name: 'new-homepage',
|
|
44
|
+
buckets: {
|
|
45
|
+
control: {
|
|
46
|
+
weight: 0.6
|
|
47
|
+
},
|
|
48
|
+
versionA: {
|
|
49
|
+
weight: 0.2
|
|
50
|
+
},
|
|
51
|
+
versionB: {
|
|
52
|
+
weight: 0.2
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
var buckets = {
|
|
57
|
+
control: 0,
|
|
58
|
+
versionA: 0,
|
|
59
|
+
versionB: 0
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Bucket the user
|
|
63
|
+
for (var i = 0; i < 1000; i++) {
|
|
64
|
+
test.assign('new-homepage');
|
|
65
|
+
var assignment = test.assignments()['new-homepage'];
|
|
66
|
+
buckets[assignment]++;
|
|
67
|
+
}
|
|
68
|
+
(0, _assert.default)(buckets.control);
|
|
69
|
+
(0, _assert.default)(buckets.versionA);
|
|
70
|
+
(0, _assert.default)(buckets.versionB);
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbWVtb3J5IiwiX2x1YSIsIml0IiwidGVzdCIsIkx1YSIsInN0b3JlIiwiTWVtb3J5U3RvcmUiLCJkZWZpbmUiLCJuYW1lIiwiYnVja2V0cyIsImEiLCJ3ZWlnaHQiLCJkZWZhdWx0IiwiYiIsImMiLCJhc3NpZ24iLCJkZWZpbml0aW9ucyIsImkiLCJhc3NlcnQiLCJkZWVwU3RyaWN0RXF1YWwiLCJjb250cm9sIiwidmVyc2lvbkEiLCJ2ZXJzaW9uQiIsImFzc2lnbm1lbnQiLCJhc3NpZ25tZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vdW5pdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0J1xuXG5pbXBvcnQgTWVtb3J5U3RvcmUgZnJvbSAnLi4vc3RvcmVzL21lbW9yeSdcbmltcG9ydCBMdWEgZnJvbSAnLi4vbHVhJ1xuXG5pdCgnc2hvdWxkIGtlZXAgdGhlIHNhbWUgYnVja2V0cyBpZiAuYXNzaWduKCkgaXMgcmFuIHR3aWNlJywgKCkgPT4ge1xuICBjb25zdCB0ZXN0ID0gbmV3IEx1YSh7IHN0b3JlOiBNZW1vcnlTdG9yZSgpIH0pXG4gIHRlc3QuZGVmaW5lKFtcbiAgICB7XG4gICAgICBuYW1lOiAnMScsXG4gICAgICBidWNrZXRzOiB7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB3ZWlnaHQ6IDEsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYjoge1xuICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgfSxcbiAgICAgICAgYzoge1xuICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSlcbiAgdGVzdC5hc3NpZ24oKVxuXG4gIGNvbnN0IGJ1Y2tldHMgPSB0ZXN0LmRlZmluaXRpb25zKClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgdGVzdC5hc3NpZ24oKVxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYnVja2V0cywgdGVzdC5kZWZpbml0aW9ucygpKVxuICB9XG59KVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZG9sbGFyc2hhdmVjbHViL2x1YS9pc3N1ZXMvMjdcbml0KCdzaG91bGQgcmFuZG9tbHkgYXNzaWduIHdoZW4gZG9pbmcgLmFzc2lnbigpJywgKCkgPT4ge1xuICAvLyBTZXQgdXAgb3VyIHRlc3QgQVBJXG4gIGNvbnN0IHRlc3QgPSBuZXcgTHVhKHsgc3RvcmU6IE1lbW9yeVN0b3JlKCkgfSlcblxuICAvLyBEZWZpbmUgYSB0ZXN0XG4gIHRlc3QuZGVmaW5lKHtcbiAgICBuYW1lOiAnbmV3LWhvbWVwYWdlJyxcbiAgICBidWNrZXRzOiB7XG4gICAgICBjb250cm9sOiB7IHdlaWdodDogMC42IH0sXG4gICAgICB2ZXJzaW9uQTogeyB3ZWlnaHQ6IDAuMiB9LFxuICAgICAgdmVyc2lvbkI6IHsgd2VpZ2h0OiAwLjIgfSxcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IGJ1Y2tldHMgPSB7XG4gICAgY29udHJvbDogMCxcbiAgICB2ZXJzaW9uQTogMCxcbiAgICB2ZXJzaW9uQjogMCxcbiAgfVxuXG4gIC8vIEJ1Y2tldCB0aGUgdXNlclxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykge1xuICAgIHRlc3QuYXNzaWduKCduZXctaG9tZXBhZ2UnKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSB0ZXN0LmFzc2lnbm1lbnRzKClbJ25ldy1ob21lcGFnZSddXG4gICAgYnVja2V0c1thc3NpZ25tZW50XSsrXG4gIH1cblxuICBhc3NlcnQoYnVja2V0cy5jb250cm9sKVxuICBhc3NlcnQoYnVja2V0cy52ZXJzaW9uQSlcbiAgYXNzZXJ0KGJ1Y2tldHMudmVyc2lvbkIpXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLHNC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
|