Skip to content

Commit

Permalink
Compatible Error Handling
Browse files Browse the repository at this point in the history
  • Loading branch information
hyzx86 committed Jun 11, 2024
1 parent 73ac3c6 commit 7c4c1d0
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,14 @@ public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, Jso
throw new ArgumentException("Unexpected type to convert.", nameof(typeToConvert));
}

if (!reader.TryGetDateTime(out DateTime value) && DateTime.TryParse(reader.GetString()!, out value))
if (!reader.TryGetDateTime(out DateTime value))
{
return value;
var stringValue = reader.GetString();
if (DateTime.TryParse(stringValue, out value))
{
return value;
}
throw new JsonException($"Unable to convert \"{stringValue}\" to DateTime.");
}

return value;
Expand Down
22 changes: 22 additions & 0 deletions test/OrchardCore.Tests/Data/ContentItemTests.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Diagnostics;
using System.Text.Json;
using System.Text.Json.Dynamic;
using System.Text.Json.Nodes;
Expand Down Expand Up @@ -25,6 +26,15 @@ public void JsonNode_WhenParseCalled_ConvertShortTimeFormatToTimeField()
"DateTimeFieldTest": {
"Value": "2024-5-31 13:05"
},
"NullDateTimeFieldTest": {
"Value": null
},
"EmptyDateTimeFieldTest": {
"Value": ""
},
"ErrorFormatDateTimeFieldTest": {
"Value": "ErrorFormatValue"
},
"TimezoneDateTimeFieldTest": {
"Value": "2022-12-13T21:02:18.399-05:00"
},
Expand All @@ -40,14 +50,26 @@ public void JsonNode_WhenParseCalled_ConvertShortTimeFormatToTimeField()
var dateField = jobject.SelectNode("DateFieldTest").ToObject<DateField>();
var dateTimeField = jobject.SelectNode("DateTimeFieldTest").ToObject<DateTimeField>();
var timezoneDateTimeFieldTest = jobject.SelectNode("TimezoneDateTimeFieldTest").ToObject<DateTimeField>();
var nullDateTimeField = jobject.SelectNode("NullDateTimeFieldTest").ToObject<DateTimeField>();

// Assert

Assert.Null(nullDateTimeField.Value);

var emptyValueTestexcepion = Assert.Throws<JsonException>(() => jobject.SelectNode("EmptyDateTimeFieldTest").ToObject<DateTimeField>());
Assert.Equal("Unable to convert \"\" to DateTime.", emptyValueTestexcepion.Message);

var errorFormatValueTestexcepion = Assert.Throws<JsonException>(() => jobject.SelectNode("ErrorFormatDateTimeFieldTest").ToObject<DateTimeField>());
Assert.Equal("Unable to convert \"ErrorFormatValue\" to DateTime.", errorFormatValueTestexcepion.Message);


Assert.Equal("13:05:00", timeField.Value.Value.ToString());
Assert.Equal("2024-05-31", dateField.Value.Value.ToString("yyyy-MM-dd"));
Assert.Equal("2024-05-31 13:05", dateTimeField.Value.Value.ToString("yyyy-MM-dd HH:mm"));
Assert.Equal("13:05:00", JObject.FromObject(timeField).SelectNode("Value").ToString());
Assert.Equal("2024-05-31T00:00:00Z", JObject.FromObject(dateField).SelectNode("Value").ToString());
Assert.Equal("2024-05-31T13:05:00Z", JObject.FromObject(dateTimeField).SelectNode("Value").ToString());
Assert.Null(JObject.FromObject(nullDateTimeField).SelectNode("Value"));

var utcTime = TimeZoneInfo.ConvertTimeToUtc(timezoneDateTimeFieldTest.Value.Value);
Assert.Equal("2022-12-14 02:02:18", utcTime.ToString("yyyy-MM-dd HH:mm:ss"));
Expand Down

0 comments on commit 7c4c1d0

Please sign in to comment.