Skip to content

Commit 982e3a5

Browse files
Crubin/forced bucketing (#70)
* added tests for forced bucketing * added testing for not running experiment * version bump, changelog change
1 parent 90a3f59 commit 982e3a5

File tree

4 files changed

+161
-3
lines changed

4 files changed

+161
-3
lines changed

CHANGELOG

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
-------------------------------------------------------------------------------
2+
1.5.0
3+
-------------------------------------------------------------------------------
4+
* Bump optimizely-server-sdk to version 1.4.0, which includes:
5+
- Add support for numeric metrics.
6+
- Add getForcedVariation and setForcedVariation methods for client-side variation setting
7+
- Bug fix for filtering out null attribute and event tag values
8+
-------------------------------------------------------------------------------
9+
110
-------------------------------------------------------------------------------
211
1.4.3
312
-------------------------------------------------------------------------------

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var enums = require('optimizely-server-sdk/lib/utils/enums');
2121
var logger = require('optimizely-server-sdk/lib/plugins/logger');
2222
var Optimizely = require('optimizely-server-sdk/lib/optimizely');
2323

24-
var JAVASCRIPT_CLIENT_VERSION = '1.4.3';
24+
var JAVASCRIPT_CLIENT_VERSION = '1.5.0';
2525
var MODULE_NAME = 'INDEX';
2626

2727
/**

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "optimizely-client-sdk",
3-
"version": "1.4.3",
3+
"version": "1.5.0",
44
"description": "JavaScript SDK for Optimizely X Full Stack",
55
"main": "index.js",
66
"scripts": {
@@ -23,7 +23,7 @@
2323
},
2424
"homepage": "https://github.com/optimizely/javascript-sdk#readme",
2525
"dependencies": {
26-
"optimizely-server-sdk": "~1.3.3"
26+
"optimizely-server-sdk": "~1.4.0"
2727
},
2828
"devDependencies": {
2929
"chai": "^3.5.0",

tests.js

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,155 @@ describe('javascript-sdk', function() {
112112
done();
113113
});
114114

115+
it('should be able to set and get a forced variation', function(done) {
116+
var optlyInstance = optimizelyFactory.createInstance({
117+
datafile: testData.getTestProjectConfig(),
118+
errorHandler: fakeErrorHandler,
119+
eventDispatcher: eventDispatcher,
120+
logger: fakeLogger,
121+
});
122+
123+
var didSetVariation = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'control');
124+
assert.strictEqual(didSetVariation, true);
125+
126+
var variation = optlyInstance.getForcedVariation('testExperiment', 'testUser');
127+
assert.strictEqual(variation, 'control')
128+
done();
129+
});
130+
131+
it('should be able to set and unset a forced variation', function(done) {
132+
var optlyInstance = optimizelyFactory.createInstance({
133+
datafile: testData.getTestProjectConfig(),
134+
errorHandler: fakeErrorHandler,
135+
eventDispatcher: eventDispatcher,
136+
logger: fakeLogger,
137+
});
138+
139+
var didSetVariation = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'control');
140+
assert.strictEqual(didSetVariation, true);
141+
142+
var variation = optlyInstance.getForcedVariation('testExperiment', 'testUser');
143+
assert.strictEqual(variation, 'control')
144+
145+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperiment', 'testUser', null);
146+
assert.strictEqual(didSetVariation2, true);
147+
148+
var variation2 = optlyInstance.getForcedVariation('testExperiment', 'testUser');
149+
assert.strictEqual(variation2, null)
150+
done();
151+
});
152+
153+
it('should be able to set multiple experiments for one user', function(done) {
154+
var optlyInstance = optimizelyFactory.createInstance({
155+
datafile: testData.getTestProjectConfig(),
156+
errorHandler: fakeErrorHandler,
157+
eventDispatcher: eventDispatcher,
158+
logger: fakeLogger,
159+
});
160+
161+
var didSetVariation = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'control');
162+
assert.strictEqual(didSetVariation, true);
163+
164+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperimentLaunched', 'testUser', 'controlLaunched');
165+
assert.strictEqual(didSetVariation2, true);
166+
167+
168+
var variation = optlyInstance.getForcedVariation('testExperiment', 'testUser');
169+
assert.strictEqual(variation, 'control')
170+
171+
var variation2 = optlyInstance.getForcedVariation('testExperimentLaunched', 'testUser');
172+
assert.strictEqual(variation2, 'controlLaunched')
173+
done();
174+
});
175+
176+
it('should be able to set multiple experiments for one user, and unset one', function(done) {
177+
var optlyInstance = optimizelyFactory.createInstance({
178+
datafile: testData.getTestProjectConfig(),
179+
errorHandler: fakeErrorHandler,
180+
eventDispatcher: eventDispatcher,
181+
logger: fakeLogger,
182+
});
183+
184+
var didSetVariation = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'control');
185+
assert.strictEqual(didSetVariation, true);
186+
187+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperimentLaunched', 'testUser', 'controlLaunched');
188+
assert.strictEqual(didSetVariation2, true);
189+
190+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperimentLaunched', 'testUser', null);
191+
assert.strictEqual(didSetVariation2, true);
192+
193+
var variation = optlyInstance.getForcedVariation('testExperiment', 'testUser');
194+
assert.strictEqual(variation, 'control')
195+
196+
var variation2 = optlyInstance.getForcedVariation('testExperimentLaunched', 'testUser');
197+
assert.strictEqual(variation2, null)
198+
done();
199+
});
200+
201+
it('should be able to set multiple experiments for one user, and reset one', function(done) {
202+
var optlyInstance = optimizelyFactory.createInstance({
203+
datafile: testData.getTestProjectConfig(),
204+
errorHandler: fakeErrorHandler,
205+
eventDispatcher: eventDispatcher,
206+
logger: fakeLogger,
207+
});
208+
209+
var didSetVariation = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'control');
210+
assert.strictEqual(didSetVariation, true);
211+
212+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperimentLaunched', 'testUser', 'controlLaunched');
213+
assert.strictEqual(didSetVariation2, true);
214+
215+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperimentLaunched', 'testUser', 'variationLaunched');
216+
assert.strictEqual(didSetVariation2, true);
217+
218+
var variation = optlyInstance.getForcedVariation('testExperiment', 'testUser');
219+
assert.strictEqual(variation, 'control')
220+
221+
var variation2 = optlyInstance.getForcedVariation('testExperimentLaunched', 'testUser');
222+
assert.strictEqual(variation2, 'variationLaunched')
223+
done();
224+
});
225+
226+
it('should override bucketing when setForcedVariation is called', function(done) {
227+
var optlyInstance = optimizelyFactory.createInstance({
228+
datafile: testData.getTestProjectConfig(),
229+
errorHandler: fakeErrorHandler,
230+
eventDispatcher: eventDispatcher,
231+
logger: fakeLogger,
232+
});
233+
234+
var didSetVariation = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'control');
235+
assert.strictEqual(didSetVariation, true);
236+
237+
var variation = optlyInstance.getVariation('testExperiment', 'testUser');
238+
assert.strictEqual(variation, 'control')
239+
240+
var didSetVariation2 = optlyInstance.setForcedVariation('testExperiment', 'testUser', 'variation');
241+
assert.strictEqual(didSetVariation2, true);
242+
243+
var variation = optlyInstance.getVariation('testExperiment', 'testUser');
244+
assert.strictEqual(variation, 'variation')
245+
done();
246+
});
247+
248+
it('should override bucketing when setForcedVariation is called for a not running experiment', function(done) {
249+
var optlyInstance = optimizelyFactory.createInstance({
250+
datafile: testData.getTestProjectConfig(),
251+
errorHandler: fakeErrorHandler,
252+
eventDispatcher: eventDispatcher,
253+
logger: fakeLogger,
254+
});
255+
256+
var didSetVariation = optlyInstance.setForcedVariation('testExperimentNotRunning', 'testUser', 'controlNotRunning');
257+
assert.strictEqual(didSetVariation, true);
258+
259+
var variation = optlyInstance.getVariation('testExperimentNotRunning', 'testUser');
260+
assert.strictEqual(variation, null)
261+
262+
done();
263+
});
115264
});
116265
});
117266
});

0 commit comments

Comments
 (0)