Skip to content

Commit 159a6c2

Browse files
committed
Convert DateTime to UTC server-side
1 parent 15facbf commit 159a6c2

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

test/OpenApiKiotaEndToEndTests/ModelStateValidation/ModelStateValidationTests.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System.Globalization;
22
using FluentAssertions;
3+
using JsonApiDotNetCore.Configuration;
4+
using Microsoft.Extensions.DependencyInjection;
35
using Microsoft.Kiota.Http.HttpClientLibrary;
46
using OpenApiKiotaEndToEndTests.ModelStateValidation.GeneratedCode;
57
using OpenApiKiotaEndToEndTests.ModelStateValidation.GeneratedCode.Models;
@@ -25,6 +27,7 @@ public ModelStateValidationTests(IntegrationTestContext<OpenApiStartup<ModelStat
2527
_requestAdapterFactory = new TestableHttpClientRequestAdapterFactory(testOutputHelper);
2628

2729
testContext.UseController<SocialMediaAccountsController>();
30+
testContext.Factory.Services.GetRequiredService<IJsonApiOptions>().SerializerOptions.Converters.Add(new UtcDateTimeJsonConverter());
2831
}
2932

3033
[Theory]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Text.Json;
2+
using System.Text.Json.Serialization;
3+
4+
namespace OpenApiKiotaEndToEndTests.ModelStateValidation;
5+
6+
internal class UtcDateTimeJsonConverter : JsonConverter<DateTime>
7+
{
8+
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
9+
{
10+
DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(reader.GetString()!);
11+
return dateTimeOffset.UtcDateTime;
12+
}
13+
14+
public override void Write(Utf8JsonWriter writer, DateTime val, JsonSerializerOptions options)
15+
{
16+
writer.WriteStringValue(val.ToUniversalTime().ToString("O"));
17+
}
18+
}

test/OpenApiNSwagEndToEndTests/ModelStateValidation/ModelStateValidationTests.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System.Globalization;
22
using FluentAssertions;
3+
using JsonApiDotNetCore.Configuration;
34
using JsonApiDotNetCore.OpenApi.Client.NSwag;
5+
using Microsoft.Extensions.DependencyInjection;
46
using OpenApiNSwagEndToEndTests.ModelStateValidation.GeneratedCode;
57
using OpenApiTests;
68
using OpenApiTests.ModelStateValidation;
@@ -24,6 +26,7 @@ public ModelStateValidationTests(IntegrationTestContext<OpenApiStartup<ModelStat
2426
_logHttpMessageHandler = new XUnitLogHttpMessageHandler(testOutputHelper);
2527

2628
testContext.UseController<SocialMediaAccountsController>();
29+
testContext.Factory.Services.GetRequiredService<IJsonApiOptions>().SerializerOptions.Converters.Add(new UtcDateTimeJsonConverter());
2730
}
2831

2932
[Theory]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Text.Json;
2+
using System.Text.Json.Serialization;
3+
4+
namespace OpenApiNSwagEndToEndTests.ModelStateValidation;
5+
6+
internal class UtcDateTimeJsonConverter : JsonConverter<DateTime>
7+
{
8+
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
9+
{
10+
DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(reader.GetString()!);
11+
return dateTimeOffset.UtcDateTime;
12+
}
13+
14+
public override void Write(Utf8JsonWriter writer, DateTime val, JsonSerializerOptions options)
15+
{
16+
writer.WriteStringValue(val.ToUniversalTime().ToString("O"));
17+
}
18+
}

0 commit comments

Comments
 (0)