From 8c01adf05f1428bf2ada49574b25529c064da884 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Tue, 22 Sep 2026 02:29:30 +0800 Subject: Add stocks probe panel with live stock quote flow (3d-18) --- tests/FundLab.Web.Tests/BoundaryTests.fs | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'tests') 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 @@ -487,6 +487,40 @@ module ConfirmationBoundaryTests = Assert.Contains("no valid quote for 019547", message) Assert.False(updated.bondQuoteInFlight) + [] + 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) + + [] + 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) + + [] + 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 "") + [] let ``order decode keeps decimal strings and decodes option fields`` () = let confirmed = Api.decodeOrder (sampleConfirmedRaw ()) -- cgit v1.2.3