Skip to content

Commit ca3d3da

Browse files
committed
Add tests for comparison attribute conversion to canonical string representation
1 parent 9f21d86 commit ca3d3da

File tree

4 files changed

+889
-5
lines changed

4 files changed

+889
-5
lines changed

src/ConfigCat.Client.Tests/ConfigV2EvaluationTests.cs

+66
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,72 @@ public void UserObjectAttributeValueConversion_NonTextComparisons_Test(string sd
587587
Assert.AreEqual(expectedReturnValue, evaluationDetails.Value);
588588
}
589589

590+
[DataTestMethod]
591+
[DataRow("numberToStringConversion", 0.12345, "1")]
592+
[DataRow("numberToStringConversion", "decimal:0.12345", "1")]
593+
[DataRow("numberToStringConversionInt", (sbyte)125, "4")]
594+
[DataRow("numberToStringConversionInt", (byte)125, "4")]
595+
[DataRow("numberToStringConversionInt", (short)125, "4")]
596+
[DataRow("numberToStringConversionInt", (ushort)125, "4")]
597+
[DataRow("numberToStringConversionInt", 125, "4")]
598+
[DataRow("numberToStringConversionInt", 125u, "4")]
599+
[DataRow("numberToStringConversionInt", 125L, "4")]
600+
[DataRow("numberToStringConversionInt", 125ul, "4")]
601+
[DataRow("numberToStringConversionPositiveExp", -1.23456789e+96, "2")]
602+
[DataRow("numberToStringConversionNegativeExp", -12345.6789e-100, "4")]
603+
[DataRow("numberToStringConversionNaN", double.NaN, "3")]
604+
[DataRow("numberToStringConversionPositiveInf", double.PositiveInfinity, "4")]
605+
[DataRow("numberToStringConversionNegativeInf", double.NegativeInfinity, "3")]
606+
[DataRow("dateToStringConversion", "datetime:2023-03-31T23:59:59.9990000Z", "3")]
607+
[DataRow("dateToStringConversion", "datetimeoffset:2023-03-31T23:59:59.9990000Z", "3")]
608+
[DataRow("dateToStringConversion", 1680307199.999, "3")]
609+
[DataRow("dateToStringConversion", "decimal:1680307199.999", "3")]
610+
[DataRow("dateToStringConversionNaN", double.NaN, "3")]
611+
[DataRow("dateToStringConversionPositiveInf", double.PositiveInfinity, "1")]
612+
[DataRow("dateToStringConversionNegativeInf", double.NegativeInfinity, "5")]
613+
[DataRow("stringArrayToStringConversion", new[] { "read", "Write", " eXecute " }, "4")]
614+
[DataRow("stringArrayToStringConversionEmpty", new string[0], "5")]
615+
[DataRow("stringArrayToStringConversionSpecialChars", new[] { "+<>%\"'\\/\t\r\n" }, "3")]
616+
[DataRow("stringArrayToStringConversionUnicode", new[] { "äöüÄÖÜçéèñışğ⢙✓😀" }, "2")]
617+
public void ComparisonAttributeConversionToCanonicalStringRepresentation_Test(string key, object customAttributeValue, string expectedReturnValue)
618+
{
619+
var config = new ConfigLocation.LocalFile("data", "comparison_attribute_conversion.json").FetchConfig();
620+
621+
var logger = new Mock<IConfigCatLogger>().Object.AsWrapper();
622+
var evaluator = new RolloutEvaluator(logger);
623+
624+
if (customAttributeValue is string s)
625+
{
626+
const string decimalPrefix = "decimal:", dateTimePrefix = "datetime:", dateTimeOffsetPrefix = "datetimeoffset:";
627+
if (s.StartsWith(decimalPrefix, StringComparison.Ordinal))
628+
{
629+
customAttributeValue = decimal.Parse(s.Substring(decimalPrefix.Length));
630+
}
631+
else if (s.StartsWith(dateTimePrefix, StringComparison.Ordinal))
632+
{
633+
var dateTimeStyle = s.EndsWith("Z", StringComparison.Ordinal) ? DateTimeStyles.AdjustToUniversal : DateTimeStyles.None;
634+
customAttributeValue = DateTime.ParseExact(s.Substring(dateTimePrefix.Length), "o", CultureInfo.InvariantCulture, dateTimeStyle);
635+
}
636+
else if (s.StartsWith(dateTimeOffsetPrefix, StringComparison.Ordinal))
637+
{
638+
customAttributeValue = DateTimeOffset.ParseExact(s.Substring(dateTimeOffsetPrefix.Length), "o", CultureInfo.InvariantCulture);
639+
}
640+
}
641+
642+
var user = new User("12345")
643+
{
644+
Custom =
645+
{
646+
["Custom1"] = customAttributeValue
647+
}
648+
};
649+
650+
const string defaultValue = "default";
651+
var actualReturnValue = evaluator.Evaluate(config!.Settings, key, defaultValue, user, remoteConfig: null, logger).Value;
652+
653+
Assert.AreEqual(expectedReturnValue, actualReturnValue);
654+
}
655+
590656
[DataTestMethod]
591657
[DataRow("isoneof", "no trim")]
592658
[DataRow("isnotoneof", "no trim")]

0 commit comments

Comments
 (0)