Skip to content

Commit

Permalink
Throws an exception if the datetime cannot be converted. (OrchardCMS#…
Browse files Browse the repository at this point in the history
…16288)

Co-authored-by: Hisham Bin Ateya <[email protected]>
Co-authored-by: Sebastien Ros <[email protected]>
Co-authored-by: hyzx86 <[email protected]>
  • Loading branch information
4 people authored Aug 15, 2024
1 parent 054d50f commit 59437f1
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,15 @@ public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, Jso
throw new ArgumentException("Unexpected type to convert.", nameof(typeToConvert));
}

if (!reader.TryGetDateTime(out var value) && DateTime.TryParse(reader.GetString()!, out value))
if (!reader.TryGetDateTime(out var 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
44 changes: 44 additions & 0 deletions test/OrchardCore.Tests/Data/ContentItemTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,25 @@ namespace OrchardCore.Tests.Data;

public class ContentItemTests
{
[Fact]
public void NullValueDateTimeFieldSerialisationTest()
{
// Arrange
var jsonStr = """
{
"NullValueDateTimeFieldTest": {
"Value": null
}
}
""";

var jobject = JsonNode.Parse(jsonStr);

var nullValueDateTimeField = jobject.SelectNode("NullValueDateTimeFieldTest").ToObject<DateTimeField>();
Assert.Null(nullValueDateTimeField.Value);
Assert.Null(JObject.FromObject(nullValueDateTimeField).SelectNode("Value"));
}

/// <summary>
/// To validate <see cref="DateTimeJsonConverter"/>
/// and <seealso cref="TimeSpanJsonConverter"/>
Expand Down Expand Up @@ -49,10 +68,35 @@ public void JsonNode_WhenParseCalled_ConvertShortTimeFormatToTimeField()
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());


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

[Fact]
public void JsonNode_WhenParseCalled_ThrowsJsonExceptionWithInvalidDateTime()
{
// Arrange
var jsonStr = """
{
"EmptyValueDateTimeFieldTest": {
"Value": ""
},
"ErrorFormatDateTimeFieldTest": {
"Value": "ErrorFormatValue"
}
}
""";

// Act
var jobject = JsonNode.Parse(jsonStr);

// Assert
_ = Assert.Throws<JsonException>(() => jobject.SelectNode("EmptyValueDateTimeFieldTest").ToObject<DateTimeField>());

_ = Assert.Throws<JsonException>(() => jobject.SelectNode("ErrorFormatDateTimeFieldTest").ToObject<DateTimeField>());
}

[Fact]
public void ShouldSerializeContent()
{
Expand Down

0 comments on commit 59437f1

Please sign in to comment.