Skip to content

Commit 19c70cc

Browse files
[FSSDK-11177] cmab uuid adjustment
1 parent 252ba9e commit 19c70cc

File tree

9 files changed

+114
-94
lines changed

9 files changed

+114
-94
lines changed

OptimizelySDK.Net35/OptimizelySDK.Net35.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@
230230
<Compile Include="..\OptimizelySDK\Bucketing\UserProfileUtil.cs">
231231
<Link>Bucketing\UserProfileUtil</Link>
232232
</Compile>
233+
<Compile Include="..\OptimizelySDK\Bucketing\VariationDecisionResult.cs">
234+
<Link>Bucketing\VariationDecisionResult.cs</Link>
235+
</Compile>
233236
<Compile Include="..\OptimizelySDK\Entity\FeatureVariableUsage.cs">
234237
<Link>Entity\FeatureVariableUsage</Link>
235238
</Compile>

OptimizelySDK.Net40/OptimizelySDK.Net40.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,9 @@
229229
<Compile Include="..\OptimizelySDK\Bucketing\UserProfileUtil.cs">
230230
<Link>Bucketing\UserProfileUtil</Link>
231231
</Compile>
232+
<Compile Include="..\OptimizelySDK\Bucketing\VariationDecisionResult.cs">
233+
<Link>Bucketing\VariationDecisionResult.cs</Link>
234+
</Compile>
232235
<Compile Include="..\OptimizelySDK\Entity\FeatureVariableUsage.cs">
233236
<Link>Entity\FeatureVariableUsage</Link>
234237
</Compile>

OptimizelySDK.NetStandard16/OptimizelySDK.NetStandard16.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
<Compile Include="..\OptimizelySDK\Bucketing\UserProfileTracker.cs" />
8080
<Compile Include="..\OptimizelySDK\Bucketing\UserProfileService.cs" />
8181
<Compile Include="..\OptimizelySDK\Bucketing\UserProfileUtil.cs" />
82+
<Compile Include="..\OptimizelySDK\Bucketing\VariationDecisionResult.cs" />
8283
<Compile Include="..\OptimizelySDK\ProjectConfig.cs" />
8384
<Compile Include="..\OptimizelySDK\Config\DatafileProjectConfig.cs" />
8485
<Compile Include="..\OptimizelySDK\Entity\Integration.cs" />

OptimizelySDK.Tests/CmabTests/DecisionServiceCmabTest.cs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,11 @@ public void TestGetVariationWithCmabExperimentReturnsVariation()
9797
var result = _decisionService.GetVariation(experiment, userContext, mockConfig.Object);
9898

9999
Assert.IsNotNull(result);
100-
Assert.IsNotNull(result.ResultObject, "Variation should be returned");
101-
Assert.AreEqual(VARIATION_A_KEY, result.ResultObject.Key);
102-
Assert.AreEqual(VARIATION_A_ID, result.ResultObject.Id);
103-
Assert.AreEqual(TEST_CMAB_UUID, result.DecisionReasons.CmabUuid);
100+
Assert.IsNotNull(result.ResultObject, "VariationDecisionResult should be returned");
101+
Assert.IsNotNull(result.ResultObject.Variation, "Variation should be returned");
102+
Assert.AreEqual(VARIATION_A_KEY, result.ResultObject.Variation.Key);
103+
Assert.AreEqual(VARIATION_A_ID, result.ResultObject.Variation.Id);
104+
Assert.AreEqual(TEST_CMAB_UUID, result.ResultObject.CmabUuid);
104105

105106
var reasons = result.DecisionReasons.ToReport(true);
106107
var expectedMessage =
@@ -138,7 +139,7 @@ public void TestGetVariationWithCmabExperimentZeroTrafficAllocation()
138139

139140
Assert.IsNotNull(result);
140141
Assert.IsNull(result.ResultObject, "No variation should be returned with 0 traffic");
141-
Assert.IsNull(result.DecisionReasons.CmabUuid);
142+
Assert.IsNull(result.ResultObject?.CmabUuid);
142143

143144
var reasons = result.DecisionReasons.ToReport(true);
144145
var expectedMessage =
@@ -183,7 +184,7 @@ public void TestGetVariationWithCmabExperimentServiceError()
183184

184185
Assert.IsNotNull(result);
185186
Assert.IsNull(result.ResultObject, "Should return null on error");
186-
Assert.IsNull(result.DecisionReasons.CmabUuid);
187+
// CmabUuid is now in VariationDecisionResult, not DecisionReasons
187188

188189
var reasonsList = result.DecisionReasons.ToReport(true);
189190
Assert.IsTrue(reasonsList.Exists(reason =>
@@ -232,7 +233,7 @@ public void TestGetVariationWithCmabExperimentUnknownVariationId()
232233

233234
Assert.IsNotNull(result);
234235
Assert.IsNull(result.ResultObject);
235-
Assert.IsNull(result.DecisionReasons.CmabUuid);
236+
// CmabUuid is now in VariationDecisionResult, not DecisionReasons
236237

237238
var reasons = result.DecisionReasons.ToReport(true);
238239
var expectedMessage =
@@ -298,9 +299,9 @@ public void TestGetVariationWithCmabExperimentCacheHit()
298299

299300
Assert.IsNotNull(result1.ResultObject);
300301
Assert.IsNotNull(result2.ResultObject);
301-
Assert.AreEqual(result1.ResultObject.Key, result2.ResultObject.Key);
302-
Assert.IsNotNull(result1.DecisionReasons.CmabUuid);
303-
Assert.AreEqual(result1.DecisionReasons.CmabUuid, result2.DecisionReasons.CmabUuid);
302+
Assert.AreEqual(result1.ResultObject.Variation.Key, result2.ResultObject.Variation.Key);
303+
Assert.IsNotNull(result1.ResultObject.CmabUuid);
304+
Assert.AreEqual(result1.ResultObject.CmabUuid, result2.ResultObject.CmabUuid);
304305

305306
cmabClientMock.Verify(c => c.FetchDecision(
306307
TEST_EXPERIMENT_ID,
@@ -367,9 +368,9 @@ public void TestGetVariationWithCmabExperimentCacheMissAttributesChanged()
367368

368369
Assert.IsNotNull(result1.ResultObject);
369370
Assert.IsNotNull(result2.ResultObject);
370-
Assert.IsNotNull(result1.DecisionReasons.CmabUuid);
371-
Assert.IsNotNull(result2.DecisionReasons.CmabUuid);
372-
Assert.AreNotEqual(result1.DecisionReasons.CmabUuid, result2.DecisionReasons.CmabUuid);
371+
Assert.IsNotNull(result1.ResultObject.CmabUuid);
372+
Assert.IsNotNull(result2.ResultObject.CmabUuid);
373+
Assert.AreNotEqual(result1.ResultObject.CmabUuid, result2.ResultObject.CmabUuid);
373374

374375
cmabClientMock.Verify(c => c.FetchDecision(
375376
TEST_EXPERIMENT_ID,
@@ -424,8 +425,8 @@ public void TestGetVariationForFeatureExperimentWithCmab()
424425
// Assert
425426
Assert.IsNotNull(result);
426427
Assert.IsNotNull(result.ResultObject);
427-
Assert.AreEqual(VARIATION_A_KEY, result.ResultObject.Key);
428-
Assert.AreEqual(TEST_CMAB_UUID, result.DecisionReasons.CmabUuid);
428+
Assert.AreEqual(VARIATION_A_KEY, result.ResultObject.Variation.Key);
429+
Assert.AreEqual(TEST_CMAB_UUID, result.ResultObject.CmabUuid);
429430
}
430431

431432
/// <summary>
@@ -466,8 +467,8 @@ public void TestGetVariationForFeatureWithCmabExperiment()
466467
// Assert
467468
Assert.IsNotNull(result);
468469
Assert.IsNotNull(result.ResultObject);
469-
Assert.IsTrue(result.ResultObject.FeatureEnabled == true);
470-
Assert.AreEqual(TEST_CMAB_UUID, result.DecisionReasons.CmabUuid);
470+
Assert.IsTrue(result.ResultObject.Variation.FeatureEnabled == true);
471+
Assert.AreEqual(TEST_CMAB_UUID, result.ResultObject.CmabUuid);
471472
}
472473

473474
/// <summary>
@@ -523,7 +524,7 @@ public void TestGetDecisionForCmabExperimentAttributeFiltering()
523524

524525
Assert.IsNotNull(result);
525526
Assert.IsNotNull(result.ResultObject);
526-
Assert.IsNotNull(result.DecisionReasons.CmabUuid);
527+
Assert.IsNotNull(result.ResultObject.CmabUuid);
527528

528529
cmabClientMock.VerifyAll();
529530
}
@@ -572,7 +573,7 @@ public void TestGetDecisionForCmabExperimentNoAttributeIds()
572573

573574
Assert.IsNotNull(result);
574575
Assert.IsNotNull(result.ResultObject);
575-
Assert.IsNotNull(result.DecisionReasons.CmabUuid);
576+
Assert.IsNotNull(result.ResultObject.CmabUuid);
576577

577578
cmabClientMock.VerifyAll();
578579
}

OptimizelySDK.Tests/DecisionServiceTest.cs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public void TestGetVariationForcedVariationPrecedesAudienceEval()
129129
WhitelistedUserId)), Times.Once);
130130

131131
// no attributes provided for a experiment that has an audience
132-
Assertions.AreEqual(expectedVariation, actualVariation.ResultObject);
132+
Assertions.AreEqual(expectedVariation, actualVariation.ResultObject.Variation);
133133

134134
BucketerMock.Verify(
135135
_ => _.Bucket(It.IsAny<ProjectConfig>(), It.IsAny<Experiment>(), It.IsAny<string>(),
@@ -327,7 +327,7 @@ public void TestBucketReturnsVariationStoredInUserProfile()
327327
var actualVariation = decisionService.GetVariation(experiment,
328328
OptimizelyUserContextMock.Object, ProjectConfig);
329329

330-
Assertions.AreEqual(variation, actualVariation.ResultObject);
330+
Assertions.AreEqual(variation, actualVariation.ResultObject.Variation);
331331

332332
Assert.AreEqual(actualVariation.DecisionReasons.ToReport(true).Count, 1);
333333
Assert.AreEqual(actualVariation.DecisionReasons.ToReport(true)[0],
@@ -423,7 +423,7 @@ public void TestGetVariationSavesBucketedVariationIntoUserProfile()
423423
Assert.IsTrue(TestData.CompareObjects(variation.ResultObject,
424424
decisionService.
425425
GetVariation(experiment, OptimizelyUserContextMock.Object, ProjectConfig).
426-
ResultObject));
426+
ResultObject.Variation));
427427

428428
LoggerMock.Verify(l => l.Log(LogLevel.INFO, string.Format(
429429
"Saved variation \"{0}\" of experiment \"{1}\" for user \"{2}\".",
@@ -494,8 +494,7 @@ public void TestGetVariationSavesANewUserProfile()
494494

495495
var actualVariation = decisionService.GetVariation(experiment,
496496
OptimizelyUserContextMock.Object, ProjectConfig);
497-
498-
Assertions.AreEqual(variation.ResultObject, actualVariation.ResultObject);
497+
Assertions.AreEqual(variation.ResultObject, actualVariation.ResultObject.Variation);
499498

500499
UserProfileServiceMock.Verify(_ => _.Save(It.IsAny<Dictionary<string, object>>()),
501500
Times.Once);
@@ -732,10 +731,11 @@ public void TestGetVariationForFeatureExperimentGivenNonMutexGroupAndUserNotBuck
732731
public void TestGetVariationForFeatureExperimentGivenNonMutexGroupAndUserIsBucketed()
733732
{
734733
var experiment = ProjectConfig.GetExperimentFromKey("test_experiment_multivariate");
735-
var variation = Result<Variation>.NewResult(
736-
ProjectConfig.GetVariationFromId("test_experiment_multivariate", "122231"),
734+
var variationObj = ProjectConfig.GetVariationFromId("test_experiment_multivariate", "122231");
735+
var variation = Result<VariationDecisionResult>.NewResult(
736+
new VariationDecisionResult(variationObj, null, false),
737737
DecisionReasons);
738-
var expectedDecision = new FeatureDecision(experiment, variation.ResultObject,
738+
var expectedDecision = new FeatureDecision(experiment, variationObj,
739739
FeatureDecision.DECISION_SOURCE_FEATURE_TEST);
740740
var userAttributes = new UserAttributes();
741741

@@ -770,10 +770,12 @@ public void TestGetVariationForFeatureExperimentGivenNonMutexGroupAndUserIsBucke
770770
public void TestGetVariationForFeatureExperimentGivenMutexGroupAndUserIsBucketed()
771771
{
772772
var mutexExperiment = ProjectConfig.GetExperimentFromKey("group_experiment_1");
773-
var variation =
774-
Result<Variation>.NewResult(mutexExperiment.Variations[0], DecisionReasons);
773+
var variationObj = mutexExperiment.Variations[0];
774+
var variation = Result<VariationDecisionResult>.NewResult(
775+
new VariationDecisionResult(variationObj, null, false),
776+
DecisionReasons);
775777
var userAttributes = new UserAttributes();
776-
var expectedDecision = new FeatureDecision(mutexExperiment, variation.ResultObject,
778+
var expectedDecision = new FeatureDecision(mutexExperiment, variationObj,
777779
FeatureDecision.DECISION_SOURCE_FEATURE_TEST);
778780

779781
var optlyObject = new Optimizely(TestData.Datafile, new ValidEventDispatcher(),
@@ -816,7 +818,7 @@ public void TestGetVariationForFeatureExperimentGivenMutexGroupAndUserNotBuckete
816818
It.IsAny<OptimizelyUserContext>(), ProjectConfig,
817819
It.IsAny<OptimizelyDecideOption[]>(), It.IsAny<UserProfileTracker>(),
818820
It.IsAny<DecisionReasons>())).
819-
Returns(Result<Variation>.NullResult(null));
821+
Returns(Result<VariationDecisionResult>.NullResult(null));
820822

821823
var featureFlag = ProjectConfig.GetFeatureFlagFromKey("boolean_feature");
822824
var actualDecision = DecisionServiceMock.Object.GetVariationForFeatureExperiment(
@@ -1312,10 +1314,11 @@ public void TestGetVariationForFeatureWhenTheUserIsBuckedtedInBothExperimentAndR
13121314
var featureFlag = ProjectConfig.GetFeatureFlagFromKey("string_single_variable_feature");
13131315
var experiment =
13141316
ProjectConfig.GetExperimentFromKey("test_experiment_with_feature_rollout");
1315-
var variation = Result<Variation>.NewResult(
1316-
ProjectConfig.GetVariationFromId("test_experiment_with_feature_rollout", "122236"),
1317+
var variationObj = ProjectConfig.GetVariationFromId("test_experiment_with_feature_rollout", "122236");
1318+
var variation = Result<VariationDecisionResult>.NewResult(
1319+
new VariationDecisionResult(variationObj, null, false),
13171320
DecisionReasons);
1318-
var expectedDecision = new FeatureDecision(experiment, variation.ResultObject,
1321+
var expectedDecision = new FeatureDecision(experiment, variationObj,
13191322
FeatureDecision.DECISION_SOURCE_FEATURE_TEST);
13201323
var userAttributes = new UserAttributes
13211324
{
@@ -1332,7 +1335,7 @@ public void TestGetVariationForFeatureWhenTheUserIsBuckedtedInBothExperimentAndR
13321335
BucketerMock.
13331336
Setup(bm => bm.Bucket(ProjectConfig, experiment, It.IsAny<string>(),
13341337
It.IsAny<string>())).
1335-
Returns(variation);
1338+
Returns(Result<Variation>.NewResult(variationObj, DecisionReasons));
13361339

13371340
DecisionServiceMock.Setup(ds => ds.GetVariation(experiment,
13381341
OptimizelyUserContextMock.Object, ProjectConfig,

0 commit comments

Comments
 (0)