diff --git a/OptimizelySDK.Tests/EventTests/EventBuilderTest.cs b/OptimizelySDK.Tests/EventTests/EventBuilderTest.cs index 2248b8ca..1329619c 100644 --- a/OptimizelySDK.Tests/EventTests/EventBuilderTest.cs +++ b/OptimizelySDK.Tests/EventTests/EventBuilderTest.cs @@ -564,6 +564,7 @@ public void TestCreateConversionEventNoAttributesWithInvalidValue() {"timestamp", timeStamp }, {"uuid", guid }, {"key", "purchase" }, + {"revenue", 42 }, {"tags", new Dictionary { diff --git a/OptimizelySDK.Tests/UtilsTests/EventTagUtilsTest.cs b/OptimizelySDK.Tests/UtilsTests/EventTagUtilsTest.cs index 42cfb4ca..6c431ac8 100644 --- a/OptimizelySDK.Tests/UtilsTests/EventTagUtilsTest.cs +++ b/OptimizelySDK.Tests/UtilsTests/EventTagUtilsTest.cs @@ -35,12 +35,16 @@ public void TestGetRevenueValue() { var expectedValue = 42; var expectedValue2 = 100; + var expectedValueString = 123; var validTag = new Dictionary() { { "revenue", 42 } }; var validTag2 = new Dictionary() { { "revenue", 100 } }; + var validTagStringValue = new Dictionary() { + { "revenue", "123" } + }; var invalidTag = new Dictionary() { { "abc", 42 } @@ -51,16 +55,22 @@ public void TestGetRevenueValue() var invalidValue = new Dictionary() { { "revenue", 42.5 } }; + var invalidTagNonRevenue = new Dictionary() + { + {"non-revenue", 123 } + }; // Invalid data. Assert.Null(EventTagUtils.GetRevenueValue(null)); Assert.Null(EventTagUtils.GetRevenueValue(invalidTag)); Assert.Null(EventTagUtils.GetRevenueValue(nullValue)); Assert.Null(EventTagUtils.GetRevenueValue(invalidValue)); + Assert.Null(EventTagUtils.GetRevenueValue(invalidTagNonRevenue)); // Valid data. Assert.AreEqual(EventTagUtils.GetRevenueValue(validTag), expectedValue); Assert.AreEqual(EventTagUtils.GetRevenueValue(validTag2), expectedValue2); + Assert.AreEqual(EventTagUtils.GetRevenueValue(validTagStringValue), expectedValueString); } [Test] diff --git a/OptimizelySDK/Utils/EventTagUtils.cs b/OptimizelySDK/Utils/EventTagUtils.cs index dc9c4ad7..9f3b54c7 100644 --- a/OptimizelySDK/Utils/EventTagUtils.cs +++ b/OptimizelySDK/Utils/EventTagUtils.cs @@ -10,13 +10,14 @@ public class EventTagUtils public static object GetRevenueValue(Dictionary eventTags) { + int result = 0; if (eventTags == null || !eventTags.ContainsKey(REVENUE_EVENT_METRIC_NAME) || eventTags[REVENUE_EVENT_METRIC_NAME] == null - || !(eventTags[REVENUE_EVENT_METRIC_NAME] is int)) + || !int.TryParse(eventTags[REVENUE_EVENT_METRIC_NAME].ToString(), out result)) return null; - return eventTags[REVENUE_EVENT_METRIC_NAME]; + return result; } public static object GetNumericValue(Dictionary eventTags, ILogger logger = null)