correctif UTC sur le POST/PUT RDV
This commit is contained in:
parent
703757d326
commit
ebe9d0b740
2 changed files with 43 additions and 1 deletions
|
|
@ -112,4 +112,35 @@ public sealed class RdvQueryApiControllerTests : IClassFixture<ApiWebServerFixtu
|
|||
Assert.NotNull(created);
|
||||
Assert.Equal("alice", created!.ClientId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task PostQuery_accepts_local_datetime_and_persists_as_utc()
|
||||
{
|
||||
_fixture.ResetAndSeedRdvQueryGraph();
|
||||
using var http = NewClient(subject: "alice");
|
||||
|
||||
var localEventDate = DateTime.Now.AddDays(2);
|
||||
var createPayload = new
|
||||
{
|
||||
ActivityCode = "dev",
|
||||
PerformerId = "alice",
|
||||
Consent = true,
|
||||
EventDate = localEventDate,
|
||||
Location = new
|
||||
{
|
||||
Address = "3 rue du Test",
|
||||
Latitude = 48.8568,
|
||||
Longitude = 2.3524,
|
||||
},
|
||||
Reason = "Rendez-vous date locale",
|
||||
Status = QueryStatus.Inserted,
|
||||
};
|
||||
|
||||
var createResponse = await http.PostAsJsonAsync("/api/v1/billing/Rdv", createPayload, TestContext.Current.CancellationToken);
|
||||
Assert.Equal(HttpStatusCode.Created, createResponse.StatusCode);
|
||||
|
||||
var created = await createResponse.Content.ReadFromJsonAsync<RdvQuery>(TestContext.Current.CancellationToken);
|
||||
Assert.NotNull(created);
|
||||
Assert.Equal(DateTimeKind.Utc, created!.EventDate.Kind);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ public class RdvQueryApiController : Controller
|
|||
var uid = User.GetUserId();
|
||||
// Security: the caller always posts for themselves.
|
||||
query.ClientId = uid;
|
||||
query.EventDate = EnsureUtc(query.EventDate);
|
||||
|
||||
ModelState.Remove("Client");
|
||||
ModelState.Remove("ClientId");
|
||||
|
|
@ -140,7 +141,7 @@ public class RdvQueryApiController : Controller
|
|||
existing.ActivityCode = query.ActivityCode;
|
||||
existing.PerformerId = query.PerformerId;
|
||||
existing.Consent = query.Consent;
|
||||
existing.EventDate = query.EventDate;
|
||||
existing.EventDate = EnsureUtc(query.EventDate);
|
||||
existing.LocationType = query.LocationType;
|
||||
existing.Reason = query.Reason;
|
||||
existing.Status = query.Status;
|
||||
|
|
@ -206,4 +207,14 @@ public class RdvQueryApiController : Controller
|
|||
{
|
||||
return _context.RdvQueries.Any(e => e.Id == id);
|
||||
}
|
||||
|
||||
private static DateTime EnsureUtc(DateTime value)
|
||||
{
|
||||
return value.Kind switch
|
||||
{
|
||||
DateTimeKind.Utc => value,
|
||||
DateTimeKind.Local => value.ToUniversalTime(),
|
||||
_ => DateTime.SpecifyKind(value, DateTimeKind.Utc)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue