Skip to content

Commit dd8c502

Browse files
mfahadahmedaliabbasrizvi
authored andcommitted
feat(api): Feature variable APIs now return default variable value when featureEnabled property is false. (#249)
1 parent 3c69a02 commit dd8c502

File tree

6 files changed

+348
-164
lines changed

6 files changed

+348
-164
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ describe('lib/core/decision_service', function() {
843843
],
844844
'featureEnabled': false,
845845
'key': 'variation2'
846-
}
846+
},
847847
},
848848
},
849849
variation: {

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -496,16 +496,15 @@ module.exports = {
496496

497497
/**
498498
* Get the value of the given variable for the given variation. If the given
499-
* variable has no value for the given variation, return the variable's
500-
* default value. Log an error message if the variation is invalid. If the
499+
* variable has no value for the given variation, return null. Log an error message if the variation is invalid. If the
501500
* variable or variation are invalid, return null.
502501
* @param {Object} projectConfig
503502
* @param {Object} variable
504503
* @param {Object} variation
505504
* @param {Object} logger
506505
* @return {string|null} The value of the given variable for the given
507-
* variation, or the variable default value if the given variable has no value
508-
* for the given variation, or null if the variation or variable are invalid
506+
* variation, or null if the given variable has no value
507+
* for the given variation or if the variation or variable are invalid
509508
*/
510509
getVariableValueForVariation: function(projectConfig, variable, variation, logger) {
511510
if (!variable || !variation) {
@@ -519,7 +518,8 @@ module.exports = {
519518

520519
var variableUsages = projectConfig.variationVariableUsageMap[variation.id];
521520
var variableUsage = variableUsages[variable.id];
522-
return variableUsage ? variableUsage.value : variable.defaultValue;
521+
522+
return variableUsage ? variableUsage.value : null;
523523
},
524524

525525
/**

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -453,11 +453,11 @@ describe('lib/core/project_config', function() {
453453
assert.strictEqual(result, null);
454454
});
455455

456-
it('returns the variable default value if the variation does not have a value for this variable', function() {
456+
it('returns null if the variation does not have a value for this variable', function() {
457457
var variation = configObj.variationIdMap['595008']; // This variation has no variable values associated with it
458458
var variable = configObj.featureKeyMap.test_feature_for_experiment.variableKeyMap.num_buttons;
459459
var result = projectConfig.getVariableValueForVariation(configObj, variable, variation, featureManagementLogger);
460-
assert.strictEqual(result, '10');
460+
assert.isNull(result);
461461
});
462462
});
463463

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

+15-5
Original file line numberDiff line numberDiff line change
@@ -632,17 +632,27 @@ Optimizely.prototype._getFeatureVariableForType = function(featureKey, variableK
632632
return null;
633633
}
634634

635-
var variableValue;
636635
var featureEnabled = false;
636+
var variableValue = variable.defaultValue;
637637
var decision = this.decisionService.getVariationForFeature(this.configObj, featureFlag, userId, attributes);
638638

639639
if (decision.variation !== null) {
640640
featureEnabled = decision.variation.featureEnabled;
641-
variableValue = projectConfig.getVariableValueForVariation(this.configObj, variable, decision.variation, this.logger);
642-
this.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.USER_RECEIVED_VARIABLE_VALUE, MODULE_NAME, variableKey, featureFlag.key, variableValue, userId));
641+
var value = projectConfig.getVariableValueForVariation(this.configObj, variable, decision.variation, this.logger);
642+
if (value !== null) {
643+
if (featureEnabled === true) {
644+
variableValue = value;
645+
this.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.USER_RECEIVED_VARIABLE_VALUE, MODULE_NAME, variableKey, featureFlag.key, variableValue, userId));
646+
} else {
647+
this.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.FEATURE_NOT_ENABLED_RETURN_DEFAULT_VARIABLE_VALUE, MODULE_NAME,
648+
featureFlag.key, userId, variableKey));
649+
}
650+
} else {
651+
this.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.VARIABLE_NOT_USED_RETURN_DEFAULT_VARIABLE_VALUE, MODULE_NAME, variableKey, decision.variation.key));
652+
}
643653
} else {
644-
variableValue = variable.defaultValue;
645-
this.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.USER_RECEIVED_DEFAULT_VARIABLE_VALUE, MODULE_NAME, userId, variableKey, featureFlag.key));
654+
this.logger.log(LOG_LEVEL.INFO, sprintf(LOG_MESSAGES.USER_RECEIVED_DEFAULT_VARIABLE_VALUE, MODULE_NAME, userId,
655+
variableKey, featureFlag.key));
646656
}
647657

648658
var experimentKey = null;

0 commit comments

Comments
 (0)