@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.
@@ -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+IHtcbiAgY29uc3QgdGVzdCA9IG5ldyBMdWEoeyBzdG9yZTogTWVtb3J5U3RvcmUoKSB9KVxuICB0ZXN0LmRlZmluZShbXG4gICAge1xuICAgICAgbmFtZTogJ3Rlc3QtdG8tcmVtb3ZlLWJ1Y2tldC1mb3InLFxuICAgICAgYnVja2V0czogeyBmb286IHsgd2VpZ2h0OiAxIH0gfSxcbiAgICB9LFxuICBdKVxuICB0ZXN0LmFzc2lnbigpXG4gIGNvbnN0IGluZm8gPSB0ZXN0LmFzc2lnbm1lbnRzKClcbiAgZXhwZWN0KGluZm9bJ3Rlc3QtdG8tcmVtb3ZlLWJ1Y2tldC1mb3InXSkudG8uZXF1YWwoJ2ZvbycpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGVzdC10by1yZW1vdmUtYnVja2V0LWZvci0tZm9vJykpLnRvLmVxdWFsKHRydWUpXG5cbiAgdGVzdC5hc3NpZ24oJ3Rlc3QtdG8tcmVtb3ZlLWJ1Y2tldC1mb3InLCBudWxsKVxuXG4gIGNvbnN0IHVwZGF0ZWRJbmZvID0gdGVzdC5hc3NpZ25tZW50cygpXG4gIGV4cGVjdCh1cGRhdGVkSW5mb1sndGVzdC10by1yZW1vdmUtYnVja2V0LWZvciddKS50by5lcXVhbCh1bmRlZmluZWQpXG4gIGV4cGVjdChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGVzdC10by1yZW1vdmUtYnVja2V0LWZvci0tZm9vJykpLnRvLmVxdWFsKGZhbHNlKVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsT0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsSUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBSkE7O0FBTUFJLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxZQUFNO0VBQ25DLElBQU1DLElBQUksR0FBRyxRQUFRO0VBRXJCLElBQU1DLElBQUksR0FBRyxJQUFJQyxZQUFHLENBQUM7SUFBRUMsS0FBSyxFQUFFLElBQUFDLGVBQVcsRUFBQztFQUFFLENBQUMsQ0FBQztFQUM5Q0gsSUFBSSxDQUFDSSxNQUFNLENBQUM7SUFDVkwsSUFBSSxFQUFKQSxJQUFJO0lBQ0pNLE9BQU8sRUFBRTtNQUNQQyxHQUFHLEVBQUU7UUFDSEMsTUFBTSxFQUFFO01BQ1Y7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGUCxJQUFJLENBQUNRLE1BQU0sQ0FBQyxDQUFDO0VBQ2IsSUFBTUMsSUFBSSxHQUFHVCxJQUFJLENBQUNVLFdBQVcsQ0FBQyxDQUFDO0VBRS9CLElBQUFDLFlBQU0sRUFBQ0YsSUFBSSxDQUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDYSxFQUFFLENBQUNDLEtBQUssQ0FBQyxLQUFLLENBQUM7RUFDbEMsSUFBQUYsWUFBTSxFQUFDRyxRQUFRLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLElBQUFDLE1BQUEsQ0FBSW5CLElBQUksVUFBTyxDQUFDLENBQUMsQ0FBQ2EsRUFBRSxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGZixFQUFFLENBQUMsaUNBQWlDLEVBQUUsWUFBTTtFQUMxQyxJQUFNRSxJQUFJLEdBQUcsSUFBSUMsWUFBRyxDQUFDO0lBQUVDLEtBQUssRUFBRSxJQUFBQyxlQUFXLEVBQUM7RUFBRSxDQUFDLENBQUM7RUFFOUNILElBQUksQ0FBQ0ksTUFBTSxDQUFDLENBQ1Y7SUFDRUwsSUFBSSxFQUFFLGNBQWM7SUFDcEJNLE9BQU8sRUFBRTtNQUNQQyxHQUFHLEVBQUU7UUFBRUMsTUFBTSxFQUFFO01BQUU7SUFDbkI7RUFDRixDQUFDLEVBQUU7SUFDRFIsSUFBSSxFQUFFLGNBQWM7SUFDcEJNLE9BQU8sRUFBRTtNQUNQYyxHQUFHLEVBQUU7UUFBRVosTUFBTSxFQUFFO01BQUU7SUFDbkI7RUFDRixDQUFDLENBQ0YsQ0FBQztFQUNGUCxJQUFJLENBQUNRLE1BQU0sQ0FBQyxDQUFDO0VBQ2IsSUFBTUMsSUFBSSxHQUFHVCxJQUFJLENBQUNVLFdBQVcsQ0FBQyxDQUFDO0VBRS9CLElBQUFDLFlBQU0sRUFBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNHLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUM1QyxJQUFBRixZQUFNLEVBQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDRyxFQUFFLENBQUNDLEtBQUssQ0FBQyxLQUFLLENBQUM7RUFDNUMsSUFBQUYsWUFBTSxFQUFDRyxRQUFRLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDTCxFQUFFLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDNUUsSUFBQUYsWUFBTSxFQUFDRyxRQUFRLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDTCxFQUFFLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDOUUsQ0FBQyxDQUFDO0FBRUZmLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxZQUFNO0VBQ3pELElBQU1FLElBQUksR0FBRyxJQUFJQyxZQUFHLENBQUM7SUFBRUMsS0FBSyxFQUFFLElBQUFDLGVBQVcsRUFBQztFQUFFLENBQUMsQ0FBQztFQUU5Q0gsSUFBSSxDQUFDSSxNQUFNLENBQUMsQ0FDVjtJQUNFTCxJQUFJLEVBQUUsY0FBYztJQUNwQk0sT0FBTyxFQUFFO01BQ1BDLEdBQUcsRUFBRTtRQUFFQyxNQUFNLEVBQUU7TUFBRTtJQUNuQjtFQUNGLENBQUMsRUFBRTtJQUNEUixJQUFJLEVBQUUsY0FBYztJQUNwQk0sT0FBTyxFQUFFO01BQ1BjLEdBQUcsRUFBRTtRQUFFWixNQUFNLEVBQUU7TUFBRTtJQUNuQjtFQUNGLENBQUMsRUFBRTtJQUNEUixJQUFJLEVBQUUsY0FBYztJQUNwQk0sT0FBTyxFQUFFO01BQ1BlLEdBQUcsRUFBRTtRQUFFYixNQUFNLEVBQUU7TUFBRTtJQUNuQjtFQUNGLENBQUMsQ0FDRixDQUFDO0VBQ0ZQLElBQUksQ0FBQ1EsTUFBTSxDQUFDLGNBQWMsQ0FBQztFQUMzQixJQUFNQyxJQUFJLEdBQUdULElBQUksQ0FBQ1UsV0FBVyxDQUFDLENBQUM7RUFFL0IsSUFBQUMsWUFBTSxFQUFDVSxNQUFNLENBQUNDLElBQUksQ0FBQ2IsSUFBSSxDQUFDLENBQUNjLE1BQU0sQ0FBQyxDQUFDWCxFQUFFLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDNUMsSUFBQUYsWUFBTSxFQUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQ0csRUFBRSxDQUFDQyxLQUFLLENBQUMsS0FBSyxDQUFDO0VBQzVDLElBQUFGLFlBQU0sRUFBQ0csUUFBUSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQ0wsRUFBRSxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzlFLENBQUMsQ0FBQztBQUVGZixFQUFFLENBQUMsMkRBQTJELEVBQUUsWUFBTTtFQUNwRSxJQUFNRSxJQUFJLEdBQUcsSUFBSUMsWUFBRyxDQUFDO0lBQUVDLEtBQUssRUFBRSxJQUFBQyxlQUFXLEVBQUM7RUFBRSxDQUFDLENBQUM7RUFDOUNILElBQUksQ0FBQ0ksTUFBTSxDQUFDLENBQ1Y7SUFDRUwsSUFBSSxFQUFFLGNBQWM7SUFDcEJNLE9BQU8sRUFBRTtNQUNQQyxHQUFHLEVBQUU7UUFBRUMsTUFBTSxFQUFFO01BQUUsQ0FBQztNQUNsQlksR0FBRyxFQUFFO1FBQUVaLE1BQU0sRUFBRTtNQUFFLENBQUM7TUFDbEJhLEdBQUcsRUFBRTtRQUFFYixNQUFNLEVBQUU7TUFBRTtJQUNuQjtFQUNGLENBQUMsQ0FDRixDQUFDO0VBQ0ZQLElBQUksQ0FBQ1EsTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUM7RUFDbEMsSUFBTUMsSUFBSSxHQUFHVCxJQUFJLENBQUNVLFdBQVcsQ0FBQyxDQUFDO0VBRS9CLElBQUFDLFlBQU0sRUFBQ1UsTUFBTSxDQUFDQyxJQUFJLENBQUNiLElBQUksQ0FBQyxDQUFDYyxNQUFNLENBQUMsQ0FBQ1gsRUFBRSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzVDLElBQUFGLFlBQU0sRUFBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNHLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUM1QyxJQUFBRixZQUFNLEVBQUNHLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUNMLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQztBQUM5RSxDQUFDLENBQUM7QUFFRmYsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLFlBQU07RUFDakYsSUFBTUUsSUFBSSxHQUFHLElBQUlDLFlBQUcsQ0FBQztJQUFFQyxLQUFLLEVBQUUsSUFBQUMsZUFBVyxFQUFDO0VBQUUsQ0FBQyxDQUFDO0VBQzlDSCxJQUFJLENBQUNJLE1BQU0sQ0FBQyxDQUNWO0lBQ0VMLElBQUksRUFBRSxjQUFjO0lBQ3BCTSxPQUFPLEVBQUU7TUFDUG1CLENBQUMsRUFBRTtRQUFFakIsTUFBTSxFQUFFO01BQUUsQ0FBQztNQUNoQmtCLENBQUMsRUFBRTtRQUFFbEIsTUFBTSxFQUFFO01BQUU7SUFDakI7RUFDRixDQUFDLEVBQUU7SUFDRFIsSUFBSSxFQUFFLGNBQWM7SUFDcEJNLE9BQU8sRUFBRTtNQUNQcUIsQ0FBQyxFQUFFO1FBQUVuQixNQUFNLEVBQUU7TUFBRSxDQUFDO01BQ2hCb0IsQ0FBQyxFQUFFO1FBQUVwQixNQUFNLEVBQUU7TUFBRTtJQUNqQjtFQUNGLENBQUMsRUFBRTtJQUNEUixJQUFJLEVBQUUsY0FBYztJQUNwQk0sT0FBTyxFQUFFO01BQ1B1QixDQUFDLEVBQUU7UUFBRXJCLE1BQU0sRUFBRTtNQUFFLENBQUM7TUFDaEJzQixDQUFDLEVBQUU7UUFBRXRCLE1BQU0sRUFBRTtNQUFFO0lBQ2pCO0VBQ0YsQ0FBQyxDQUNGLENBQUM7RUFDRlAsSUFBSSxDQUFDUSxNQUFNLENBQUMsQ0FBQztFQUNiLElBQUlDLElBQUksR0FBR1QsSUFBSSxDQUFDVSxXQUFXLENBQUMsQ0FBQztFQUU3QixJQUFBQyxZQUFNLEVBQUNVLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDYixJQUFJLENBQUMsQ0FBQ2MsTUFBTSxDQUFDLENBQUNYLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUM1QyxJQUFBRixZQUFNLEVBQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDRyxFQUFFLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFFMUNiLElBQUksQ0FBQ1EsTUFBTSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUM7RUFDaENDLElBQUksR0FBR1QsSUFBSSxDQUFDVSxXQUFXLENBQUMsQ0FBQztFQUV6QixJQUFBQyxZQUFNLEVBQUNVLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDYixJQUFJLENBQUMsQ0FBQ2MsTUFBTSxDQUFDLENBQUNYLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUM1QyxJQUFBRixZQUFNLEVBQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDRyxFQUFFLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUZmLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxZQUFNO0VBQzNELElBQU1FLElBQUksR0FBRyxJQUFJQyxZQUFHLENBQUM7SUFBRUMsS0FBSyxFQUFFLElBQUFDLGVBQVcsRUFBQztFQUFFLENBQUMsQ0FBQztFQUM5Q0gsSUFBSSxDQUFDSSxNQUFNLENBQUMsQ0FDVjtJQUNFTCxJQUFJLEVBQUUsMkJBQTJCO0lBQ2pDTSxPQUFPLEVBQUU7TUFBRUMsR0FBRyxFQUFFO1FBQUVDLE1BQU0sRUFBRTtNQUFFO0lBQUU7RUFDaEMsQ0FBQyxDQUNGLENBQUM7RUFDRlAsSUFBSSxDQUFDUSxNQUFNLENBQUMsQ0FBQztFQUNiLElBQU1DLElBQUksR0FBR1QsSUFBSSxDQUFDVSxXQUFXLENBQUMsQ0FBQztFQUMvQixJQUFBQyxZQUFNLEVBQUNGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUNHLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUN6RCxJQUFBRixZQUFNLEVBQUNHLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUNMLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQztFQUV6RmIsSUFBSSxDQUFDUSxNQUFNLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDO0VBRTlDLElBQU1zQixXQUFXLEdBQUc5QixJQUFJLENBQUNVLFdBQVcsQ0FBQyxDQUFDO0VBQ3RDLElBQUFDLFlBQU0sRUFBQ21CLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUNsQixFQUFFLENBQUNDLEtBQUssQ0FBQ2tCLFNBQVMsQ0FBQztFQUNwRSxJQUFBcEIsWUFBTSxFQUFDRyxRQUFRLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxRQUFRLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDTCxFQUFFLENBQUNDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDNUYsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbWVtb3J5IiwiX2x1YSIsIml0IiwidGVzdCIsIkx1YSIsInN0b3JlIiwiTWVtb3J5U3RvcmUiLCJkZWZpbmUiLCJuYW1lIiwiYnVja2V0cyIsImEiLCJ3ZWlnaHQiLCJkZWZhdWx0IiwiYiIsImMiLCJhc3NpZ24iLCJkZWZpbml0aW9ucyIsImkiLCJhc3NlcnQiLCJkZWVwU3RyaWN0RXF1YWwiLCJjb250cm9sIiwidmVyc2lvbkEiLCJ2ZXJzaW9uQiIsImFzc2lnbm1lbnQiLCJhc3NpZ25tZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vdW5pdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0J1xuXG5pbXBvcnQgTWVtb3J5U3RvcmUgZnJvbSAnLi4vc3RvcmVzL21lbW9yeSdcbmltcG9ydCBMdWEgZnJvbSAnLi4vbHVhJ1xuXG5pdCgnc2hvdWxkIGtlZXAgdGhlIHNhbWUgYnVja2V0cyBpZiAuYXNzaWduKCkgaXMgcmFuIHR3aWNlJywgKCkgPT4ge1xuICBjb25zdCB0ZXN0ID0gbmV3IEx1YSh7IHN0b3JlOiBNZW1vcnlTdG9yZSgpIH0pXG4gIHRlc3QuZGVmaW5lKFtcbiAgICB7XG4gICAgICBuYW1lOiAnMScsXG4gICAgICBidWNrZXRzOiB7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB3ZWlnaHQ6IDEsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYjoge1xuICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgfSxcbiAgICAgICAgYzoge1xuICAgICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSlcbiAgdGVzdC5hc3NpZ24oKVxuXG4gIGNvbnN0IGJ1Y2tldHMgPSB0ZXN0LmRlZmluaXRpb25zKClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgdGVzdC5hc3NpZ24oKVxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYnVja2V0cywgdGVzdC5kZWZpbml0aW9ucygpKVxuICB9XG59KVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZG9sbGFyc2hhdmVjbHViL2x1YS9pc3N1ZXMvMjdcbml0KCdzaG91bGQgcmFuZG9tbHkgYXNzaWduIHdoZW4gZG9pbmcgLmFzc2lnbigpJywgKCkgPT4ge1xuICAvLyBTZXQgdXAgb3VyIHRlc3QgQVBJXG4gIGNvbnN0IHRlc3QgPSBuZXcgTHVhKHsgc3RvcmU6IE1lbW9yeVN0b3JlKCkgfSlcblxuICAvLyBEZWZpbmUgYSB0ZXN0XG4gIHRlc3QuZGVmaW5lKHtcbiAgICBuYW1lOiAnbmV3LWhvbWVwYWdlJyxcbiAgICBidWNrZXRzOiB7XG4gICAgICBjb250cm9sOiB7IHdlaWdodDogMC42IH0sXG4gICAgICB2ZXJzaW9uQTogeyB3ZWlnaHQ6IDAuMiB9LFxuICAgICAgdmVyc2lvbkI6IHsgd2VpZ2h0OiAwLjIgfSxcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IGJ1Y2tldHMgPSB7XG4gICAgY29udHJvbDogMCxcbiAgICB2ZXJzaW9uQTogMCxcbiAgICB2ZXJzaW9uQjogMCxcbiAgfVxuXG4gIC8vIEJ1Y2tldCB0aGUgdXNlclxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykge1xuICAgIHRlc3QuYXNzaWduKCduZXctaG9tZXBhZ2UnKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSB0ZXN0LmFzc2lnbm1lbnRzKClbJ25ldy1ob21lcGFnZSddXG4gICAgYnVja2V0c1thc3NpZ25tZW50XSsrXG4gIH1cblxuICBhc3NlcnQoYnVja2V0cy5jb250cm9sKVxuICBhc3NlcnQoYnVja2V0cy52ZXJzaW9uQSlcbiAgYXNzZXJ0KGJ1Y2tldHMudmVyc2lvbkIpXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQUcsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLFlBQU07RUFDakUsSUFBTUMsSUFBSSxHQUFHLElBQUlDLFlBQUcsQ0FBQztJQUFFQyxLQUFLLEVBQUUsSUFBQUMsZUFBVyxFQUFDO0VBQUUsQ0FBQyxDQUFDO0VBQzlDSCxJQUFJLENBQUNJLE1BQU0sQ0FBQyxDQUNWO0lBQ0VDLElBQUksRUFBRSxHQUFHO0lBQ1RDLE9BQU8sRUFBRTtNQUNQQyxDQUFDLEVBQUU7UUFDREMsTUFBTSxFQUFFLENBQUM7UUFDVEMsT0FBTyxFQUFFO01BQ1gsQ0FBQztNQUNEQyxDQUFDLEVBQUU7UUFDREYsTUFBTSxFQUFFO01BQ1YsQ0FBQztNQUNERyxDQUFDLEVBQUU7UUFDREgsTUFBTSxFQUFFO01BQ1Y7SUFDRjtFQUNGLENBQUMsQ0FDRixDQUFDO0VBQ0ZSLElBQUksQ0FBQ1ksTUFBTSxDQUFDLENBQUM7RUFFYixJQUFNTixPQUFPLEdBQUdOLElBQUksQ0FBQ2EsV0FBVyxDQUFDLENBQUM7RUFFbEMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsR0FBRyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtJQUM1QmQsSUFBSSxDQUFDWSxNQUFNLENBQUMsQ0FBQztJQUNiRyxlQUFNLENBQUNDLGVBQWUsQ0FBQ1YsT0FBTyxFQUFFTixJQUFJLENBQUNhLFdBQVcsQ0FBQyxDQUFDLENBQUM7RUFDckQ7QUFDRixDQUFDLENBQUM7O0FBRUY7QUFDQWQsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLFlBQU07RUFDdEQ7RUFDQSxJQUFNQyxJQUFJLEdBQUcsSUFBSUMsWUFBRyxDQUFDO0lBQUVDLEtBQUssRUFBRSxJQUFBQyxlQUFXLEVBQUM7RUFBRSxDQUFDLENBQUM7O0VBRTlDO0VBQ0FILElBQUksQ0FBQ0ksTUFBTSxDQUFDO0lBQ1ZDLElBQUksRUFBRSxjQUFjO0lBQ3BCQyxPQUFPLEVBQUU7TUFDUFcsT0FBTyxFQUFFO1FBQUVULE1BQU0sRUFBRTtNQUFJLENBQUM7TUFDeEJVLFFBQVEsRUFBRTtRQUFFVixNQUFNLEVBQUU7TUFBSSxDQUFDO01BQ3pCVyxRQUFRLEVBQUU7UUFBRVgsTUFBTSxFQUFFO01BQUk7SUFDMUI7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNRixPQUFPLEdBQUc7SUFDZFcsT0FBTyxFQUFFLENBQUM7SUFDVkMsUUFBUSxFQUFFLENBQUM7SUFDWEMsUUFBUSxFQUFFO0VBQ1osQ0FBQzs7RUFFRDtFQUNBLEtBQUssSUFBSUwsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksRUFBRUEsQ0FBQyxFQUFFLEVBQUU7SUFDN0JkLElBQUksQ0FBQ1ksTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUMzQixJQUFNUSxVQUFVLEdBQUdwQixJQUFJLENBQUNxQixXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUNyRGYsT0FBTyxDQUFDYyxVQUFVLENBQUMsRUFBRTtFQUN2QjtFQUVBLElBQUFMLGVBQU0sRUFBQ1QsT0FBTyxDQUFDVyxPQUFPLENBQUM7RUFDdkIsSUFBQUYsZUFBTSxFQUFDVCxPQUFPLENBQUNZLFFBQVEsQ0FBQztFQUN4QixJQUFBSCxlQUFNLEVBQUNULE9BQU8sQ0FBQ2EsUUFBUSxDQUFDO0FBQzFCLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==