diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 02:29:30 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 02:29:30 +0800 |
| commit | 8c01adf05f1428bf2ada49574b25529c064da884 (patch) | |
| tree | 6342850684ff70bae877855d91074f7af3e4a030 /tests/FundLab.Web.Tests/BoundaryTests.fs | |
| parent | 7da3c3d938e4b64a43963d602ab4a0a8c89f6f9e (diff) | |
| download | fund-lab-8c01adf05f1428bf2ada49574b25529c064da884.tar.gz | |
Add stocks probe panel with live stock quote flow (3d-18)
Diffstat (limited to 'tests/FundLab.Web.Tests/BoundaryTests.fs')
| -rw-r--r-- | tests/FundLab.Web.Tests/BoundaryTests.fs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/FundLab.Web.Tests/BoundaryTests.fs b/tests/FundLab.Web.Tests/BoundaryTests.fs index 4f2137a..3001273 100644 --- a/tests/FundLab.Web.Tests/BoundaryTests.fs +++ b/tests/FundLab.Web.Tests/BoundaryTests.fs @@ -488,6 +488,40 @@ module ConfirmationBoundaryTests = Assert.False(updated.bondQuoteInFlight) [<Fact>] + let ``stock quote completion stores decoded quote and clears the message`` () = + let model = init () + + let raw : RawStockQuote = + { code = "600519"; name = box "贵州茅台"; price = box "1252.57"; currency = "CNY" } + + let updated, _ = update (StockQuoteCompleted(model.stockQuoteSeq, raw)) model + + Assert.Equal(Some "贵州茅台", updated.stockQuote |> Option.bind (fun quote -> quote.name)) + Assert.Equal(Some "1252.57", updated.stockQuote |> Option.bind (fun quote -> quote.price)) + Assert.Equal(Some "CNY", updated.stockQuote |> Option.map (fun quote -> quote.currency)) + Assert.Equal(None, updated.stockQuoteMessage) + Assert.False(updated.stockQuoteInFlight) + + [<Fact>] + let ``stock quote failure shows an unavailable message without a quote`` () = + let model = { init () with stockQuoteInFlight = true } + + let updated, _ = update (StockQuoteFailed(model.stockQuoteSeq, "collector exited with code 2")) model + + Assert.Equal(None, updated.stockQuote) + Assert.Contains("股票行情不可用", updated.stockQuoteMessage |> Option.defaultValue "") + Assert.False(updated.stockQuoteInFlight) + + [<Fact>] + let ``stock quote invalid code shows an invalid code message`` () = + let model = { init () with stockQuoteInFlight = true } + + let updated, _ = + update (StockQuoteFailed(model.stockQuoteSeq, "stock code must contain exactly six digits")) model + + Assert.Contains("无效代码", updated.stockQuoteMessage |> Option.defaultValue "") + + [<Fact>] let ``order decode keeps decimal strings and decodes option fields`` () = let confirmed = Api.decodeOrder (sampleConfirmedRaw ()) let pending = Api.decodeOrder (samplePendingRaw ()) |
