From 3f3e301f20c5ee5612a12e7dbe129b40d5e23c74 Mon Sep 17 00:00:00 2001 From: muhammadnoman <muhammadnoman@folio3.com> Date: Wed, 27 Jan 2021 22:30:24 +0500 Subject: [PATCH 1/2] SendImpressionEvent will return false when event is not sent --- OptimizelySDK/Optimizely.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OptimizelySDK/Optimizely.cs b/OptimizelySDK/Optimizely.cs index c52bdbd7..c61d8b70 100644 --- a/OptimizelySDK/Optimizely.cs +++ b/OptimizelySDK/Optimizely.cs @@ -811,8 +811,7 @@ internal OptimizelyDecision Decide(OptimizelyUserContext user, var decisionSource = flagDecisionResult.ResultObject?.Source ?? FeatureDecision.DECISION_SOURCE_ROLLOUT; if (!allOptions.Contains(OptimizelyDecideOption.DISABLE_DECISION_EVENT)) { - SendImpressionEvent(flagDecisionResult.ResultObject?.Experiment, variation, userId, userAttributes, config, key, decisionSource, featureEnabled); - decisionEventDispatched = true; + decisionEventDispatched = SendImpressionEvent(flagDecisionResult.ResultObject?.Experiment, variation, userId, userAttributes, config, key, decisionSource, featureEnabled); } var decisionReasons = flagDecisionResult.DecisionReasons; var reasonsToReport = decisionReasons.ToReport(allOptions.Contains(OptimizelyDecideOption.INCLUDE_REASONS)); @@ -929,7 +928,7 @@ private void SendImpressionEvent(Experiment experiment, Variation variation, str /// <param name="userAttributes">The user's attributes</param> /// <param name="flagKey">It can either be experiment key in case if ruleType is experiment or it's feature key in case ruleType is feature-test or rollout</param> /// <param name="ruleType">It can either be experiment in case impression event is sent from activate or it's feature-test or rollout</param> - private void SendImpressionEvent(Experiment experiment, Variation variation, string userId, + private bool SendImpressionEvent(Experiment experiment, Variation variation, string userId, UserAttributes userAttributes, ProjectConfig config, string flagKey, string ruleType, bool enabled) { @@ -941,7 +940,7 @@ private void SendImpressionEvent(Experiment experiment, Variation variation, str var userEvent = UserEventFactory.CreateImpressionEvent(config, experiment, variation, userId, userAttributes, flagKey, ruleType, enabled); if (userEvent == null) { - return; + return false; } EventProcessor.Process(userEvent); @@ -958,6 +957,7 @@ private void SendImpressionEvent(Experiment experiment, Variation variation, str NotificationCenter.SendNotifications(NotificationCenter.NotificationType.Activate, experiment, userId, userAttributes, variation, impressionEvent); } + return true; } /// <summary> From 9db1a1a150c4779f49d56c59b97539b6c2e63280 Mon Sep 17 00:00:00 2001 From: Sohail Hussain <mirza.sohailhussain@gmail.com> Date: Thu, 28 Jan 2021 15:26:29 -0800 Subject: [PATCH 2/2] notification should pass array --- OptimizelySDK.Tests/OptimizelyUserContextTest.cs | 2 +- OptimizelySDK/Optimizely.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OptimizelySDK.Tests/OptimizelyUserContextTest.cs b/OptimizelySDK.Tests/OptimizelyUserContextTest.cs index c6e7e387..6d9630ca 100644 --- a/OptimizelySDK.Tests/OptimizelyUserContextTest.cs +++ b/OptimizelySDK.Tests/OptimizelyUserContextTest.cs @@ -654,7 +654,7 @@ public void TestDecisionNotification() var enabled = true; var variables = Optimizely.GetAllFeatureVariables(flagKey, UserID); var ruleKey = "test_experiment_with_feature_rollout"; - var reasons = new Dictionary<string, object>(); + var reasons = new string[] { }; var user = Optimizely.CreateUserContext(UserID); user.SetAttribute("browser_type", "chrome"); diff --git a/OptimizelySDK/Optimizely.cs b/OptimizelySDK/Optimizely.cs index c61d8b70..5aae0da4 100644 --- a/OptimizelySDK/Optimizely.cs +++ b/OptimizelySDK/Optimizely.cs @@ -814,7 +814,7 @@ internal OptimizelyDecision Decide(OptimizelyUserContext user, decisionEventDispatched = SendImpressionEvent(flagDecisionResult.ResultObject?.Experiment, variation, userId, userAttributes, config, key, decisionSource, featureEnabled); } var decisionReasons = flagDecisionResult.DecisionReasons; - var reasonsToReport = decisionReasons.ToReport(allOptions.Contains(OptimizelyDecideOption.INCLUDE_REASONS)); + var reasonsToReport = decisionReasons.ToReport(allOptions.Contains(OptimizelyDecideOption.INCLUDE_REASONS)).ToArray(); var variationKey = flagDecisionResult.ResultObject?.Variation?.Key; // TODO: add ruleKey values when available later. use a copy of experimentKey until then. @@ -827,7 +827,7 @@ internal OptimizelyDecision Decide(OptimizelyUserContext user, { "variables", variableMap }, { "variationKey", variationKey }, { "ruleKey", ruleKey }, - { "reasons", decisionReasons }, + { "reasons", reasonsToReport }, { "decisionEventDispatched", decisionEventDispatched } }; @@ -841,7 +841,7 @@ internal OptimizelyDecision Decide(OptimizelyUserContext user, ruleKey, key, user, - reasonsToReport.ToArray()); + reasonsToReport); } internal Dictionary<string, OptimizelyDecision> DecideAll(OptimizelyUserContext user,