Skip to content

Commit fcc6126

Browse files
mikeproeng37kellyroach-optimizely
authored andcommitted
Fix impression sent from feature experiment variation toggled off. (#270)
1 parent dce1e0e commit fcc6126

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

OptimizelySDKCore/OptimizelySDKCore/Optimizely.m

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -218,23 +218,24 @@ - (BOOL)isFeatureEnabled:(NSString *)featureKey userId:(NSString *)userId attrib
218218

219219
OPTLYFeatureDecision *decision = [self.decisionService getVariationForFeature:featureFlag userId:userId attributes:attributes];
220220

221-
if (!decision || !decision.variation.featureEnabled) {
222-
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesFeatureDisabled, featureKey, userId];
223-
[self.logger logMessage:logMessage withLevel:OptimizelyLogLevelInfo];
224-
return false;
225-
}
226-
227-
if ([decision.source isEqualToString:DecisionSourceExperiment]) {
228-
[self sendImpressionEventFor:decision.experiment variation:decision.variation userId:userId attributes:attributes callback:nil];
229-
} else {
230-
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesFeatureEnabledNotExperimented, userId, featureKey];
231-
[self.logger logMessage:logMessage withLevel:OptimizelyLogLevelInfo];
221+
if (decision) {
222+
if ([decision.source isEqualToString:DecisionSourceExperiment]) {
223+
[self sendImpressionEventFor:decision.experiment variation:decision.variation userId:userId attributes:attributes callback:nil];
224+
} else {
225+
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesFeatureEnabledNotExperimented, userId, featureKey];
226+
[self.logger logMessage:logMessage withLevel:OptimizelyLogLevelInfo];
227+
}
228+
229+
if (decision.variation.featureEnabled) {
230+
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesFeatureEnabled, featureKey, userId];
231+
[self.logger logMessage:logMessage withLevel:OptimizelyLogLevelInfo];
232+
return true;
233+
}
232234
}
233235

234-
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesFeatureEnabled, featureKey, userId];
236+
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesFeatureDisabled, featureKey, userId];
235237
[self.logger logMessage:logMessage withLevel:OptimizelyLogLevelInfo];
236-
237-
return true;
238+
return false;
238239
}
239240

240241
- (NSString *)getFeatureVariableValueForType:(NSString *)variableType

OptimizelySDKCore/OptimizelySDKCoreTests/OptimizelyTest.m

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ - (void)testIsFeatureEnabledWithFeatureFlagEnabledAndUserIsBeingExperimented {
396396

397397
XCTAssertTrue([self.optimizely isFeatureEnabled:featureFlagKey userId:kUserId attributes:nil], @"should return true for enabled featureFlag");
398398

399-
// SendImpressionEvent() does not get called.
399+
// SendImpressionEvent() does get called.
400400
OCMVerify([optimizelyMock sendImpressionEventFor:decision.experiment variation:decision.variation userId:kUserId attributes:nil callback:nil]);
401401

402402
OCMVerify([decisionServiceMock getVariationForFeature:featureFlag userId:kUserId attributes:nil]);
@@ -412,17 +412,21 @@ - (void)testIsFeatureEnabledWithVariationsFeatureEnabledFalse {
412412
OPTLYFeatureDecision *decision = [[OPTLYFeatureDecision alloc] initWithExperiment:experiment variation:variation source:DecisionSourceExperiment];
413413

414414
id decisionServiceMock = OCMPartialMock(self.optimizely.decisionService);
415+
id optimizelyMock = OCMPartialMock(self.optimizely);
415416

416417
OCMStub([decisionServiceMock getVariationForFeature:featureFlag userId:kUserId attributes:nil]).andReturn(decision);
417418

418419
XCTAssertFalse([self.optimizely isFeatureEnabled:featureFlagKey userId:kUserId attributes:nil], @"should return false for disabled featureFlag");
419420

421+
// SendImpressionEvent() does get called.
422+
OCMVerify([optimizelyMock sendImpressionEventFor:decision.experiment variation:decision.variation userId:kUserId attributes:nil callback:nil]);
423+
420424
OCMVerify([decisionServiceMock getVariationForFeature:featureFlag userId:kUserId attributes:nil]);
421425
[decisionServiceMock stopMocking];
422426
}
423427

424428
// Should return true if the feature experiment variation’s `featureEnabled` property is true
425-
- (void)testIsFeatureEnabledWithVariationsFeatureEnabledtrue {
429+
- (void)testIsFeatureEnabledWithVariationsFeatureEnabledTrue {
426430
NSString *featureFlagKey = @"booleanFeature";
427431
OPTLYFeatureFlag *featureFlag = [self.optimizely.config getFeatureFlagForKey:featureFlagKey];
428432
OPTLYExperiment *experiment = [self.optimizely.config getExperimentForId:featureFlag.experimentIds[1]];
@@ -442,7 +446,7 @@ - (void)testIsFeatureEnabledWithVariationsFeatureEnabledtrue {
442446

443447
// Should return true if the user is bucketed into rollout experiment’s variation
444448
// and variation's featureEnabled is also true
445-
- (void)testIsFeatureEnabledWithVariationsFeatureEnabledtrueForRollout {
449+
- (void)testIsFeatureEnabledWithVariationsFeatureEnabledTrueForRollout {
446450
NSString *featureFlagKey = @"booleanSingleVariableFeature";
447451
OPTLYRollout *rollout = [self.optimizely.config getRolloutForId:@"166660"];
448452
OPTLYExperiment *experiment = rollout.experiments[0];

0 commit comments

Comments
 (0)