summaryrefslogtreecommitdiff
path: root/tests/FundLab.Web.Tests/BoundaryTests.fs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/FundLab.Web.Tests/BoundaryTests.fs')
-rw-r--r--tests/FundLab.Web.Tests/BoundaryTests.fs40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/FundLab.Web.Tests/BoundaryTests.fs b/tests/FundLab.Web.Tests/BoundaryTests.fs
index 2435f32..6b4eef8 100644
--- a/tests/FundLab.Web.Tests/BoundaryTests.fs
+++ b/tests/FundLab.Web.Tests/BoundaryTests.fs
@@ -419,6 +419,46 @@ module ConfirmationBoundaryTests =
Assert.Equal(None, Api.decodeOptionalText (box { case = "None"; fields = [||] }))
[<Fact>]
+ let ``nav series decodes points with optional accumulated nav`` () =
+ let raw : RawMarketNavSeriesPoint array =
+ [|
+ { navDate = "2026-09-21"; nav = "1.19020000"; accumulatedNav = null }
+ { navDate = "2026-09-18"; nav = "1.15000000"; accumulatedNav = someText "2.53000000" }
+ |]
+
+ let decoded = raw |> Array.map Api.decodeNavSeriesPoint |> Array.toList
+
+ Assert.Equal(2, decoded.Length)
+ Assert.Equal("2026-09-21", decoded[0].navDate)
+ Assert.Equal("1.19020000", decoded[0].nav)
+ Assert.Equal(None, decoded[0].accumulatedNav)
+ Assert.Equal(Some "2.53000000", decoded[1].accumulatedNav)
+
+ [<Fact>]
+ let ``nav series read completion stores points and flags availability`` () =
+ let model = init ()
+ let raw = { code = "000001"; points = [| { navDate = "2026-09-21"; nav = "1.1902"; accumulatedNav = null } |] }
+ let updated, _ = update (NavSeriesReadCompleted(model.navSeriesReadSeq, raw)) model
+
+ Assert.Equal(1, updated.navSeries.Length)
+ Assert.Equal("1.1902", updated.navSeries[0].nav)
+ Assert.True(updated.navSeriesAvailable)
+
+ [<Fact>]
+ let ``nav series read failure clears the chart without a zero fill`` () =
+ let model =
+ { init () with
+ navSeries = [ { navDate = "2026-09-21"; nav = "1.1902"; accumulatedNav = None } ]
+ navSeriesAvailable = true
+ navSeriesInFlight = true }
+
+ let updated, _ = update (NavSeriesReadFailed(model.navSeriesReadSeq, "collector exited with code 2")) model
+
+ Assert.Empty updated.navSeries
+ Assert.False(updated.navSeriesAvailable)
+ Assert.False(updated.navSeriesInFlight)
+
+ [<Fact>]
let ``order decode keeps decimal strings and decodes option fields`` () =
let confirmed = Api.decodeOrder (sampleConfirmedRaw ())
let pending = Api.decodeOrder (samplePendingRaw ())