Skip to content

Commit aae9e19

Browse files
committed
Added unit tests.
1 parent dc1b851 commit aae9e19

File tree

4 files changed

+42
-10
lines changed

4 files changed

+42
-10
lines changed

packages/optimizely-sdk/lib/core/project_config/index.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,16 @@ module.exports = {
8989

9090
projectConfig.forcedVariationMap = {};
9191

92+
// Object containing experiment Ids that exist in any feature
93+
// for checking that experiment is a feature experiment or not.
94+
projectConfig.featureExperimentsMap = {};
95+
9296
projectConfig.featureKeyMap = fns.keyBy(projectConfig.featureFlags || [], 'key');
9397
fns.forOwn(projectConfig.featureKeyMap, function(feature) {
9498
feature.variableKeyMap = fns.keyBy(feature.variables, 'key');
9599
fns.forEach(feature.experimentIds || [], function(experimentId) {
100+
// Add this experiment in feature experiment map.
101+
projectConfig.featureExperimentsMap[experimentId] = true;
96102
var experimentInFeature = projectConfig.experimentIdMap[experimentId];
97103
if (experimentInFeature.groupId) {
98104
feature.groupId = experimentInFeature.groupId;
@@ -598,17 +604,11 @@ module.exports = {
598604
/**
599605
*
600606
* @param {Object} projectConfig
601-
* @param {string} experimentKey
607+
* @param {string} experimentId
602608
* @returns {boolean} Returns true if experiment belongs to
603609
* any feature, false otherwise.
604610
*/
605-
isFeatureExperiment: function(projectConfig, experimentKey) {
606-
fns.forOwn(projectConfig.featureKeyMap, function(feature) {
607-
if (feature.experimentIds && feature.experimentIds.indexOf(experimentKey)) {
608-
return true;
609-
}
610-
});
611-
612-
return false;
611+
isFeatureExperiment: function(projectConfig, experimentId) {
612+
return projectConfig.featureExperimentsMap[experimentId];
613613
}
614614
};

packages/optimizely-sdk/lib/optimizely/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ Optimizely.prototype.getVariation = function(experimentKey, userId, attributes)
343343
}
344344

345345
var variationKey = this.decisionService.getVariation(this.configObj, experimentKey, userId, attributes);
346-
var decisionInfoType = projectConfig.isFeatureExperiment(this.configObj, experimentKey) ? DECISION_INFO_TYPES.FEATURE :
346+
var decisionInfoType = projectConfig.isFeatureExperiment(this.configObj, experiment.id) ? DECISION_INFO_TYPES.FEATURE_TEST :
347347
DECISION_INFO_TYPES.AB_TEST;
348348

349349
this.notificationCenter.sendNotifications(

packages/optimizely-sdk/lib/optimizely/index.tests.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2438,6 +2438,37 @@ describe('lib/optimizely', function() {
24382438
}
24392439
});
24402440
});
2441+
2442+
it('should send notification with variation key and type feature-test when getVariation returns feature experiment variation', function() {
2443+
var optly = new Optimizely({
2444+
clientEngine: 'node-sdk',
2445+
datafile: testData.getTestProjectConfigWithFeatures(),
2446+
eventBuilder: eventBuilder,
2447+
errorHandler: errorHandler,
2448+
eventDispatcher: eventDispatcher,
2449+
jsonSchemaValidator: jsonSchemaValidator,
2450+
logger: createdLogger,
2451+
isValidInstance: true,
2452+
});
2453+
2454+
optly.notificationCenter.addNotificationListener(
2455+
enums.NOTIFICATION_TYPES.DECISION,
2456+
decisionListener
2457+
);
2458+
2459+
bucketStub.returns('594099');
2460+
var variation = optly.getVariation('testing_my_feature', 'testUser');
2461+
assert.strictEqual(variation, 'variation2');
2462+
sinon.assert.calledWith(decisionListener, {
2463+
type: DECISION_INFO_TYPES.FEATURE_TEST,
2464+
userId: 'testUser',
2465+
attributes: {},
2466+
decisionInfo: {
2467+
experimentKey: 'testing_my_feature',
2468+
variationKey: variation
2469+
}
2470+
});
2471+
});
24412472
});
24422473

24432474
describe('feature management', function() {

packages/optimizely-sdk/lib/utils/enums/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ exports.NOTIFICATION_TYPES = {
192192
exports.DECISION_INFO_TYPES = {
193193
AB_TEST: 'ab-test',
194194
FEATURE: 'feature',
195+
FEATURE_TEST: 'feature-test',
195196
FEATURE_VARIABLE: 'feature_variable',
196197
};
197198

0 commit comments

Comments
 (0)