diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 00:56:35 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 00:56:35 +0800 |
| commit | 70e1ad4fc8ba248f835d415faade8a91ac3dc1f8 (patch) | |
| tree | c4b8ce56b1867d8b4c744422fef3e965eb2aadda /tests/FundLab.Web.Tests | |
| parent | 0597ac74757e223c17a6477ff49d69a559168279 (diff) | |
| download | fund-lab-70e1ad4fc8ba248f835d415faade8a91ac3dc1f8.tar.gz | |
Add real NAV series multi-day returns (3d-13)
Diffstat (limited to 'tests/FundLab.Web.Tests')
| -rw-r--r-- | tests/FundLab.Web.Tests/BoundaryTests.fs | 40 |
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 ()) |
