From a5ac465ab59197a55a222d30ebd2cf26ffe80f86 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 09:27:09 +0800 Subject: Fix F# option JSON serialization in confirmation/positions API responses Giraffe 6's default Newtonsoft serializer wrapped F# Some values as Value/IsSome/IsNone objects, breaking the confirmation and positions response contract (amounts must be exact decimal strings, absent fields null, quote object-or-null). Add OptionJsonConverter plus a shared serializer registration applied to both the Kestrel host and the in-process test fixture, and cover confirmation/positions over real HTTP including pending, conflict, cross-fund and Kestrel restart-replay regressions. --- tests/FundLab.Api.Tests/PersistenceTests.fs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'tests/FundLab.Api.Tests/PersistenceTests.fs') diff --git a/tests/FundLab.Api.Tests/PersistenceTests.fs b/tests/FundLab.Api.Tests/PersistenceTests.fs index 64e857c..5a049af 100644 --- a/tests/FundLab.Api.Tests/PersistenceTests.fs +++ b/tests/FundLab.Api.Tests/PersistenceTests.fs @@ -200,7 +200,10 @@ type ApiProcess(connectionString: string) = module PersistenceTestHelpers = let invoke (handler: HttpHandler) (method: string) (path: string) (headers: (string * string) list) (body: string) = let context = DefaultHttpContext() - use services = ServiceCollection().AddGiraffe().BuildServiceProvider() + use services = + (ServiceCollection() |> App.addOptionFriendlyJson) + .AddGiraffe() + .BuildServiceProvider() context.RequestServices <- services context.Request.Method <- method -- cgit v1.2.3