@@ -38,6 +38,7 @@ public class OptimizelyTest
38
38
private ProjectConfig Config ;
39
39
private Mock < EventBuilder > EventBuilderMock ;
40
40
private Mock < IErrorHandler > ErrorHandlerMock ;
41
+ private Mock < IEventDispatcher > EventDispatcherMock ;
41
42
private Optimizely Optimizely ;
42
43
private IEventDispatcher EventDispatcher ;
43
44
private const string TestUserId = "testUserId" ;
@@ -73,19 +74,19 @@ public void Initialize()
73
74
logger : LoggerMock . Object ,
74
75
errorHandler : new NoOpErrorHandler ( ) ) ;
75
76
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 ) ;
78
79
79
80
Helper = new OptimizelyHelper
80
81
{
81
82
Datafile = TestData . Datafile ,
82
- EventDispatcher = EventDispatcher ,
83
+ EventDispatcher = EventDispatcherMock . Object ,
83
84
Logger = LoggerMock . Object ,
84
85
ErrorHandler = ErrorHandlerMock . Object ,
85
86
SkipJsonValidation = false ,
86
87
} ;
87
88
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 )
89
90
{
90
91
CallBase = true
91
92
} ;
@@ -1539,6 +1540,34 @@ public void TestIsFeatureEnabledGivenFeatureFlagIsEnabledAndUserIsBeingExperimen
1539
1540
$@ "Feature flag ""{ featureKey } "" is enabled for user ""{ TestUserId } "".") ) ;
1540
1541
}
1541
1542
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
+
1542
1571
// Verify that IsFeatureEnabled returns true if a variation does not get found in the feature
1543
1572
// flag experiment but found in the rollout rule.
1544
1573
[ Test ]
0 commit comments