summaryrefslogtreecommitdiff
path: root/tests/FundLab.Web.Tests/BoundaryTests.fs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-22 02:29:30 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-22 02:29:30 +0800
commit8c01adf05f1428bf2ada49574b25529c064da884 (patch)
tree6342850684ff70bae877855d91074f7af3e4a030 /tests/FundLab.Web.Tests/BoundaryTests.fs
parent7da3c3d938e4b64a43963d602ab4a0a8c89f6f9e (diff)
downloadfund-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.fs34
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 ())