diff options
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 ()) |
