Fix date conversion on the server-side (#16841)
This commit is contained in:
@@ -11,6 +11,7 @@ using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Tests.Common.TestHelpers;
|
||||
using Umbraco.Extensions;
|
||||
using DateTimeOffset = System.DateTimeOffset;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.CoreThings;
|
||||
|
||||
@@ -332,6 +333,50 @@ public class ObjectExtensionsTests
|
||||
Assert.AreEqual("This is a string", conv.Result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanConvertDateTimeOffsetToDateTime()
|
||||
{
|
||||
var dateTimeOffset = new DateTimeOffset(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03), TimeSpan.Zero);
|
||||
var result = dateTimeOffset.TryConvertTo<DateTime>();
|
||||
Assert.IsTrue(result.Success);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(new DateTime(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03)), result.Result);
|
||||
Assert.AreEqual(DateTimeKind.Utc, result.Result.Kind);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanConvertDateTimeToDateTimeOffset()
|
||||
{
|
||||
var dateTime = new DateTime(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03), DateTimeKind.Utc);
|
||||
var result = dateTime.TryConvertTo<DateTimeOffset>();
|
||||
Assert.IsTrue(result.Success);
|
||||
Assert.AreEqual(new DateTimeOffset(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03), TimeSpan.Zero), result.Result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DiscardsOffsetWhenConvertingDateTimeOffsetToDateTime()
|
||||
{
|
||||
var dateTimeOffset = new DateTimeOffset(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03), TimeSpan.FromHours(2));
|
||||
var result = dateTimeOffset.TryConvertTo<DateTime>();
|
||||
Assert.IsTrue(result.Success);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(new DateTime(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03)), result.Result);
|
||||
Assert.AreEqual(DateTimeKind.Utc, result.Result.Kind);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DiscardsDateTimeKindWhenConvertingDateTimeToDateTimeOffset()
|
||||
{
|
||||
var dateTime = new DateTime(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03), DateTimeKind.Local);
|
||||
var result = dateTime.TryConvertTo<DateTimeOffset>();
|
||||
Assert.IsTrue(result.Success);
|
||||
Assert.AreEqual(new DateTimeOffset(new DateOnly(2024, 07, 05), new TimeOnly(12, 30, 01, 02, 03), TimeSpan.Zero), result.Result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Value_Editor_Can_Convert_Decimal_To_Decimal_Clr_Type()
|
||||
{
|
||||
@@ -342,6 +387,23 @@ public class ObjectExtensionsTests
|
||||
Assert.AreEqual(12.34d, result.Result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Value_Editor_Can_Convert_DateTimeOffset_To_DateTime_Clr_Type()
|
||||
{
|
||||
var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Date);
|
||||
|
||||
var result = valueEditor.TryConvertValueToCrlType(new DateTimeOffset(new DateOnly(2024, 07, 05), new TimeOnly(12, 30), TimeSpan.Zero));
|
||||
Assert.IsTrue(result.Success);
|
||||
Assert.IsTrue(result.Result is DateTime);
|
||||
|
||||
var dateTime = (DateTime)result.Result;
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.AreEqual(new DateTime(new DateOnly(2024, 07, 05), new TimeOnly(12, 30)), dateTime);
|
||||
Assert.AreEqual(DateTimeKind.Utc, dateTime.Kind);
|
||||
});
|
||||
}
|
||||
|
||||
private class MyTestObject
|
||||
{
|
||||
public override string ToString() => "Hello world";
|
||||
|
||||
Reference in New Issue
Block a user