@@ -1306,6 +1306,229 @@ public void TestGetFeatureVariableStringReturnTypecastedValue()
1306
1306
Assert . Null ( OptimizelyMock . Object . GetFeatureVariableString ( featureKey , variableKeyNull , TestUserId , null ) ) ;
1307
1307
}
1308
1308
1309
+ #region Feature Toggle Tests
1310
+
1311
+ [ Test ]
1312
+ public void TestGetFeatureVariableDoubleReturnsRightValueWhenUserBuckedIntoFeatureExperimentAndVariationIsToggleOn ( )
1313
+ {
1314
+ var featureKey = "double_single_variable_feature" ;
1315
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1316
+ var variableKey = "double_variable" ;
1317
+ var expectedValue = 42.42 ;
1318
+ var experiment = Config . GetExperimentFromKey ( "test_experiment_double_feature" ) ;
1319
+ var variation = Config . GetVariationFromKey ( "test_experiment_double_feature" , "control" ) ;
1320
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_EXPERIMENT ) ;
1321
+
1322
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , null ) ) . Returns ( decision ) ;
1323
+
1324
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1325
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1326
+
1327
+ var variableValue = ( double ) optly . Invoke ( "GetFeatureVariableDouble" , featureKey , variableKey , TestUserId , null ) ;
1328
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1329
+
1330
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Returning variable value ""{ variableValue } "" for variation ""{ variation . Key } "" of feature flag ""{ featureKey } "".") ) ;
1331
+ }
1332
+
1333
+ [ Test ]
1334
+ public void TestGetFeatureVariableIntegerReturnsRightValueWhenUserBuckedIntoFeatureExperimentAndVariationIsToggleOn ( )
1335
+ {
1336
+ var featureKey = "integer_single_variable_feature" ;
1337
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1338
+ var variableKey = "integer_variable" ;
1339
+ var expectedValue = 13 ;
1340
+ var experiment = Config . GetExperimentFromKey ( "test_experiment_integer_feature" ) ;
1341
+ var variation = Config . GetVariationFromKey ( "test_experiment_integer_feature" , "variation" ) ;
1342
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_EXPERIMENT ) ;
1343
+ var userAttributes = new UserAttributes
1344
+ {
1345
+ { "device_type" , "iPhone" } ,
1346
+ { "company" , "Optimizely" } ,
1347
+ { "location" , "San Francisco" }
1348
+ } ;
1349
+
1350
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , userAttributes ) ) . Returns ( decision ) ;
1351
+
1352
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1353
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1354
+
1355
+ var variableValue = ( int ) optly . Invoke ( "GetFeatureVariableInteger" , featureKey , variableKey , TestUserId , userAttributes ) ;
1356
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1357
+
1358
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Returning variable value ""{ variableValue } "" for variation ""{ variation . Key } "" of feature flag ""{ featureKey } "".") ) ;
1359
+ }
1360
+
1361
+ [ Test ]
1362
+ public void TestGetFeatureVariableDoubleReturnsDefaultValueWhenUserBuckedIntoFeatureExperimentAndVariationIsToggleOff ( )
1363
+ {
1364
+ var featureKey = "double_single_variable_feature" ;
1365
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1366
+ var variableKey = "double_variable" ;
1367
+ var expectedValue = 14.99 ;
1368
+ var experiment = Config . GetExperimentFromKey ( "test_experiment_double_feature" ) ;
1369
+ var variation = Config . GetVariationFromKey ( "test_experiment_double_feature" , "variation" ) ;
1370
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_EXPERIMENT ) ;
1371
+
1372
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , null ) ) . Returns ( decision ) ;
1373
+
1374
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1375
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1376
+
1377
+ var variableValue = ( double ) optly . Invoke ( "GetFeatureVariableDouble" , featureKey , variableKey , TestUserId , null ) ;
1378
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1379
+
1380
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Feature ""{ featureKey } "" is not enabled for user { TestUserId } . Returning default value for variable ""{ variableKey } "".") ) ;
1381
+ }
1382
+
1383
+ [ Test ]
1384
+ public void TestGetFeatureVariableIntegerReturnsDefaultValueWhenUserBuckedIntoFeatureExperimentAndVariationIsToggleOff ( )
1385
+ {
1386
+ var featureKey = "integer_single_variable_feature" ;
1387
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1388
+ var variableKey = "integer_variable" ;
1389
+ var expectedValue = 7 ;
1390
+ var experiment = Config . GetExperimentFromKey ( "test_experiment_integer_feature" ) ;
1391
+ var variation = Config . GetVariationFromKey ( "test_experiment_integer_feature" , "control" ) ;
1392
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_EXPERIMENT ) ;
1393
+ var userAttributes = new UserAttributes
1394
+ {
1395
+ { "device_type" , "iPhone" } ,
1396
+ { "company" , "Optimizely" } ,
1397
+ { "location" , "San Francisco" }
1398
+ } ;
1399
+
1400
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , userAttributes ) ) . Returns ( decision ) ;
1401
+
1402
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1403
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1404
+
1405
+ var variableValue = ( int ) optly . Invoke ( "GetFeatureVariableInteger" , featureKey , variableKey , TestUserId , userAttributes ) ;
1406
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1407
+
1408
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Feature ""{ featureKey } "" is not enabled for user { TestUserId } . Returning default value for variable ""{ variableKey } "".") ) ;
1409
+ }
1410
+
1411
+ [ Test ]
1412
+ public void TestGetFeatureVariableBooleanReturnsRightValueWhenUserBuckedIntoRolloutAndVariationIsToggleOn ( )
1413
+ {
1414
+ var featureKey = "boolean_single_variable_feature" ;
1415
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1416
+ var variableKey = "boolean_variable" ;
1417
+ var expectedValue = true ;
1418
+ var experiment = Config . GetRolloutFromId ( "166660" ) . Experiments [ 0 ] ;
1419
+ var variation = Config . GetVariationFromKey ( experiment . Key , "177771" ) ;
1420
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_ROLLOUT ) ;
1421
+
1422
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , null ) ) . Returns ( decision ) ;
1423
+
1424
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1425
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1426
+
1427
+ var variableValue = ( bool ) optly . Invoke ( "GetFeatureVariableBoolean" , featureKey , variableKey , TestUserId , null ) ;
1428
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1429
+
1430
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Returning variable value ""true"" for variation ""{ variation . Key } "" of feature flag ""{ featureKey } "".") ) ;
1431
+ }
1432
+
1433
+ [ Test ]
1434
+ public void TestGetFeatureVariableStringReturnsRightValueWhenUserBuckedIntoRolloutAndVariationIsToggleOn ( )
1435
+ {
1436
+ var featureKey = "string_single_variable_feature" ;
1437
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1438
+ var variableKey = "string_variable" ;
1439
+ var expectedValue = "cta_4" ;
1440
+ var experiment = Config . GetRolloutFromId ( "166661" ) . Experiments [ 0 ] ;
1441
+ var variation = Config . GetVariationFromKey ( experiment . Key , "177775" ) ;
1442
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_ROLLOUT ) ;
1443
+ var userAttributes = new UserAttributes
1444
+ {
1445
+ { "device_type" , "iPhone" } ,
1446
+ { "company" , "Optimizely" } ,
1447
+ { "location" , "San Francisco" }
1448
+ } ;
1449
+
1450
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , userAttributes ) ) . Returns ( decision ) ;
1451
+
1452
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1453
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1454
+
1455
+ var variableValue = ( string ) optly . Invoke ( "GetFeatureVariableString" , featureKey , variableKey , TestUserId , userAttributes ) ;
1456
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1457
+
1458
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Returning variable value ""{ variableValue } "" for variation ""{ variation . Key } "" of feature flag ""{ featureKey } "".") ) ;
1459
+ }
1460
+
1461
+ [ Test ]
1462
+ public void TestGetFeatureVariableBooleanReturnsDefaultValueWhenUserBuckedIntoRolloutAndVariationIsToggleOff ( )
1463
+ {
1464
+ var featureKey = "boolean_single_variable_feature" ;
1465
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1466
+ var variableKey = "boolean_variable" ;
1467
+ var expectedValue = true ;
1468
+ var experiment = Config . GetRolloutFromId ( "166660" ) . Experiments [ 3 ] ;
1469
+ var variation = Config . GetVariationFromKey ( experiment . Key , "177782" ) ;
1470
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_ROLLOUT ) ;
1471
+
1472
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , null ) ) . Returns ( decision ) ;
1473
+
1474
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1475
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1476
+
1477
+ var variableValue = ( bool ) optly . Invoke ( "GetFeatureVariableBoolean" , featureKey , variableKey , TestUserId , null ) ;
1478
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1479
+
1480
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Feature ""{ featureKey } "" is not enabled for user { TestUserId } . Returning default value for variable ""{ variableKey } "".") ) ;
1481
+ }
1482
+
1483
+ [ Test ]
1484
+ public void TestGetFeatureVariableStringReturnsDefaultValueWhenUserBuckedIntoRolloutAndVariationIsToggleOff ( )
1485
+ {
1486
+ var featureKey = "string_single_variable_feature" ;
1487
+ var featureFlag = Config . GetFeatureFlagFromKey ( featureKey ) ;
1488
+ var variableKey = "string_variable" ;
1489
+ var expectedValue = "wingardium leviosa" ;
1490
+ var experiment = Config . GetRolloutFromId ( "166661" ) . Experiments [ 2 ] ;
1491
+ var variation = Config . GetVariationFromKey ( experiment . Key , "177784" ) ;
1492
+ var decision = new FeatureDecision ( experiment , variation , FeatureDecision . DECISION_SOURCE_ROLLOUT ) ;
1493
+ var userAttributes = new UserAttributes
1494
+ {
1495
+ { "device_type" , "iPhone" } ,
1496
+ { "company" , "Optimizely" } ,
1497
+ { "location" , "San Francisco" }
1498
+ } ;
1499
+
1500
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , userAttributes ) ) . Returns ( decision ) ;
1501
+
1502
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1503
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1504
+
1505
+ var variableValue = ( string ) optly . Invoke ( "GetFeatureVariableString" , featureKey , variableKey , TestUserId , userAttributes ) ;
1506
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1507
+
1508
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "Feature ""{ featureKey } "" is not enabled for user { TestUserId } . Returning default value for variable ""{ variableKey } "".") ) ;
1509
+ }
1510
+
1511
+ [ Test ]
1512
+ public void TestGetFeatureVariableDoubleReturnsDefaultValueWhenUserNotBuckedIntoBothFeatureExperimentAndRollout ( )
1513
+ {
1514
+ var featureKey = "double_single_variable_feature" ;
1515
+ var featureFlag = Config . GetFeatureFlagFromKey ( "double_single_variable_feature" ) ;
1516
+ var variableKey = "double_variable" ;
1517
+ var expectedValue = 14.99 ;
1518
+
1519
+ DecisionServiceMock . Setup ( ds => ds . GetVariationForFeature ( featureFlag , TestUserId , null ) ) . Returns < FeatureDecision > ( null ) ;
1520
+
1521
+ var optly = Helper . CreatePrivateOptimizely ( ) ;
1522
+ optly . SetFieldOrProperty ( "DecisionService" , DecisionServiceMock . Object ) ;
1523
+
1524
+ var variableValue = ( double ) optly . Invoke ( "GetFeatureVariableDouble" , featureKey , variableKey , TestUserId , null ) ;
1525
+ Assert . AreEqual ( expectedValue , variableValue ) ;
1526
+
1527
+ LoggerMock . Verify ( l => l . Log ( LogLevel . INFO , $@ "User ""{ TestUserId } "" is not in any variation for feature flag ""{ featureKey } "", returning default value ""{ variableValue } "".") ) ;
1528
+ }
1529
+
1530
+ #endregion Feature Toggle Tests
1531
+
1309
1532
#endregion // Test GetFeatureVariable<Type> TypeCasting
1310
1533
1311
1534
#region Test GetFeatureVariableValueForType method
0 commit comments