@@ -38,6 +38,7 @@ public class OptimizelyTest
3838 private ProjectConfig Config ;
3939 private Mock < EventBuilder > EventBuilderMock ;
4040 private Mock < IErrorHandler > ErrorHandlerMock ;
41+ private Mock < IEventDispatcher > EventDispatcherMock ;
4142 private Optimizely Optimizely ;
4243 private IEventDispatcher EventDispatcher ;
4344 private const string TestUserId = "testUserId" ;
@@ -73,19 +74,19 @@ public void Initialize()
7374 logger : LoggerMock . Object ,
7475 errorHandler : new NoOpErrorHandler ( ) ) ;
7576
76- EventDispatcher = new ValidEventDispatcher ( ) ;
77- Optimizely = new Optimizely ( TestData . Datafile , EventDispatcher , LoggerMock . Object , ErrorHandlerMock . Object ) ;
77+ EventDispatcherMock = new Mock < IEventDispatcher > ( ) ;
78+ Optimizely = new Optimizely ( TestData . Datafile , EventDispatcherMock . Object , LoggerMock . Object , ErrorHandlerMock . Object ) ;
7879
7980 Helper = new OptimizelyHelper
8081 {
8182 Datafile = TestData . Datafile ,
82- EventDispatcher = EventDispatcher ,
83+ EventDispatcher = EventDispatcherMock . Object ,
8384 Logger = LoggerMock . Object ,
8485 ErrorHandler = ErrorHandlerMock . Object ,
8586 SkipJsonValidation = false ,
8687 } ;
8788
88- OptimizelyMock = new Mock < Optimizely > ( TestData . Datafile , EventDispatcher , LoggerMock . Object , ErrorHandlerMock . Object , null , false )
89+ OptimizelyMock = new Mock < Optimizely > ( TestData . Datafile , EventDispatcherMock . Object , LoggerMock . Object , ErrorHandlerMock . Object , null , false )
8990 {
9091 CallBase = true
9192 } ;
@@ -1539,6 +1540,34 @@ public void TestIsFeatureEnabledGivenFeatureFlagIsEnabledAndUserIsBeingExperimen
15391540 $@ "Feature flag ""{ featureKey } "" is enabled for user ""{ TestUserId } "".") ) ;
15401541 }
15411542
1543+ // Should return false and send an impression event when feature is enabled for the user
1544+ // and user is being experimented.
1545+ [ Test ]
1546+ public void TestIsFeatureEnabledGivenFeatureFlagIsNotEnabledAndUserIsBeingExperimented ( )
1547+ {
1548+ var featureKey = "double_single_variable_feature" ;
1549+ var experiment = Config . GetExperimentFromKey ( "test_experiment_double_feature" ) ;
1550+ var variation = Config . GetVariationFromKey ( "test_experiment_double_feature" , "variation" ) ;
1551+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1552+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_EXPERIMENT ) ;
1553+
1554+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , null ) ) . Returns ( decision ) ;
1555+
1556+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1557+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1558+
1559+ bool result = ( bool ) optly . Invoke ( "IsFeatureEnabled" , featureKey , TestUserId , null ) ;
1560+ Assert . False ( result ) ;
1561+
1562+ // SendImpressionEvent() gets called.
1563+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO ,
1564+ $@ "The user ""{ TestUserId } "" is not being experimented on feature ""{ featureKey } "".") , Times . Never ) ;
1565+
1566+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO ,
1567+ $@ "Feature flag ""{ featureKey } "" is not enabled for user ""{ TestUserId } "".") ) ;
1568+ EventDispatcherMock . Verify ( dispatcher => dispatcher . DispatchEvent ( It . IsAny < LogEvent > ( ) ) ) ;
1569+ }
1570+
15421571 // Verify that IsFeatureEnabled returns true if a variation does not get found in the feature
15431572 // flag experiment but found in the rollout rule.
15441573 [ Test ]
0 commit comments