From 8fe0acd7af788396645d3359832c6ece77a87105 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 22 Dec 2022 15:19:50 +1100 Subject: [PATCH 1/8] . --- .../Where/ExpressionBuilder.cs | 13 ++++++++--- .../Where/TypeConverter.cs | 23 +++++++++++++++++++ src/Tests/TypeConverterTests.cs | 20 +++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/GraphQL.EntityFramework/Where/ExpressionBuilder.cs b/src/GraphQL.EntityFramework/Where/ExpressionBuilder.cs index cabf35126..db28a92c4 100644 --- a/src/GraphQL.EntityFramework/Where/ExpressionBuilder.cs +++ b/src/GraphQL.EntityFramework/Where/ExpressionBuilder.cs @@ -119,7 +119,14 @@ static Expression ProcessList(string path, Comparison comparison, string?[]? val .MakeGenericType(listItemType) .GetMethods(BindingFlags.Public | BindingFlags.Static) .Single(m => m.Name == "BuildPredicate" && m.GetParameters().Length == 5) - .Invoke(new(), new object[] { listPath, comparison, values!, false, stringComparison! })!; + .Invoke(new(), new object[] + { + listPath, + comparison, + values!, + false, + stringComparison! + })!; // Generate a method info for the Any Enumerable Static Method var anyInfo = typeof(Enumerable) @@ -142,7 +149,7 @@ static Expression GetExpression(string path, Comparison comparison, string?[]? v { case Comparison.NotIn: WhereValidator.ValidateString(comparison, stringComparison); - expressionBody = NegateExpression(MakeStringListInComparison(values!, property, stringComparison)); // Ensure expression is negated + expressionBody = NegateExpression(MakeStringListInComparison(values!, property, stringComparison)); // Ensure expression is negated break; case Comparison.In: WhereValidator.ValidateString(comparison, stringComparison); @@ -162,7 +169,7 @@ static Expression GetExpression(string path, Comparison comparison, string?[]? v { case Comparison.NotIn: WhereValidator.ValidateObject(property.PropertyType, comparison, stringComparison); - expressionBody = NegateExpression(MakeObjectListInComparision(values!, property)); // Ensure expression is negated + expressionBody = NegateExpression(MakeObjectListInComparision(values!, property)); break; case Comparison.In: WhereValidator.ValidateObject(property.PropertyType, comparison, stringComparison); diff --git a/src/GraphQL.EntityFramework/Where/TypeConverter.cs b/src/GraphQL.EntityFramework/Where/TypeConverter.cs index a81337bec..47c686c5a 100644 --- a/src/GraphQL.EntityFramework/Where/TypeConverter.cs +++ b/src/GraphQL.EntityFramework/Where/TypeConverter.cs @@ -115,6 +115,24 @@ static IList ConvertStringsToListInternal(IEnumerable values, Type type) return values.Select(s => new DateTime?(DateTime.Parse(s))).ToList(); } + if (type == typeof(Time)) + { + return values.Select(Time.Parse).ToList(); + } + if (type == typeof(Time?)) + { + return values.Select(_ => (Time?)Time.Parse(_)).ToList(); + } + + if (type == typeof(Date)) + { + return values.Select(_ => Date.ParseExact(_, "yyyy-MM-dd")).ToList(); + } + if (type == typeof(Date?)) + { + return values.Select(s => (Date?)Date.ParseExact(_, "yyyy-MM-dd")).ToList(); + } + if (type == typeof(DateTimeOffset)) { return values.Select(DateTimeOffset.Parse).ToList(); @@ -151,6 +169,11 @@ static IList ConvertStringsToListInternal(IEnumerable values, Type type) return ValueConverter.ConvertTo(value); } + if (type == typeof(Date)) + { + return ValueConverter.ConvertTo(value); + } + if (type == typeof(DateTimeOffset)) { return ValueConverter.ConvertTo(value); diff --git a/src/Tests/TypeConverterTests.cs b/src/Tests/TypeConverterTests.cs index 20510020e..abc33a13e 100644 --- a/src/Tests/TypeConverterTests.cs +++ b/src/Tests/TypeConverterTests.cs @@ -1,4 +1,6 @@ -public class TypeConverterTests +using System.Runtime.InteropServices.JavaScript; + +public class TypeConverterTests { [Theory] [InlineData(typeof(int), "12", 12)] @@ -27,6 +29,22 @@ public void ConvertStringToDatetime() Assert.Equal(dateTime, result); } + [Fact] + public void ConvertStringToDate() + { + var date = new Date(2020,10,1); + var result = TypeConverter.ConvertStringToType(date.ToString("yyyy-MM-dd"), typeof(Date)); + Assert.Equal(date, result); + } + + [Fact] + public void ConvertStringToTime() + { + var time = new Time(10,1); + var result = TypeConverter.ConvertStringToType(time.ToString(), typeof(Time)); + Assert.Equal(time, result); + } + [Fact] public void ConvertStringToEnum() { From 1fe898ce162f4f6b653d6094da6bc5d796e3183e Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 22 Dec 2022 15:25:35 +1100 Subject: [PATCH 2/8] . --- src/GraphQL.EntityFramework/Where/TypeConverter.cs | 5 +++++ src/Tests/TypeConverterTests.cs | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/GraphQL.EntityFramework/Where/TypeConverter.cs b/src/GraphQL.EntityFramework/Where/TypeConverter.cs index 504ca2d4e..9fd5b0fdc 100644 --- a/src/GraphQL.EntityFramework/Where/TypeConverter.cs +++ b/src/GraphQL.EntityFramework/Where/TypeConverter.cs @@ -174,6 +174,11 @@ static IList ConvertStringsToListInternal(IEnumerable values, Type type) return ValueConverter.ConvertTo(value); } + if (type == typeof(Time)) + { + return ValueConverter.ConvertTo