summaryrefslogtreecommitdiff
path: root/tests/FundLab.Api.Tests/ApiTests.fs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/FundLab.Api.Tests/ApiTests.fs')
-rw-r--r--tests/FundLab.Api.Tests/ApiTests.fs66
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/FundLab.Api.Tests/ApiTests.fs b/tests/FundLab.Api.Tests/ApiTests.fs
index a46d330..1aaab6b 100644
--- a/tests/FundLab.Api.Tests/ApiTests.fs
+++ b/tests/FundLab.Api.Tests/ApiTests.fs
@@ -2,6 +2,7 @@ namespace FundLab.Api.Tests
module ApiTests =
+ open System
open Xunit
open FundLab.Api
@@ -22,3 +23,68 @@ module ApiTests =
Assert.Contains("\"status\":\"ok\"", payload)
Assert.DoesNotContain("secret", payload)
+
+ [<Fact>]
+ let ``AKShare NAV payload keeps missing publication time empty`` () =
+ let payload =
+ """
+ {
+ "schema_version": "fund-lab.akshare.v1",
+ "operation": "nav",
+ "source": "akshare",
+ "source_revision": "akshare-1.18.96/eastmoney",
+ "collected_at": "2026-09-21T10:00:00Z",
+ "instrument": { "code": "000001" },
+ "observations": [
+ {
+ "nav_date": "2001-12-18",
+ "published_at": null,
+ "nav": "1.00000000",
+ "accumulated_nav": null,
+ "daily_return": "0.00"
+ }
+ ]
+ }
+ """
+
+ match MarketData.parseNavPayload payload with
+ | Ok parsed ->
+ let observation = parsed.Observations |> List.head
+ Assert.Equal("000001", parsed.Code)
+ Assert.Equal(DateOnly(2001, 12, 18), observation.NavDate)
+ Assert.Equal(None, observation.PublishedAt)
+ Assert.Equal(None, observation.AccumulatedNav)
+ Assert.Equal(Some 0.00m, observation.DailyReturn)
+ Assert.Equal(1.00000000m, observation.Nav)
+ | Error message ->
+ Assert.Fail(sprintf "expected valid NAV payload, got %s" message)
+
+ [<Fact>]
+ let ``AKShare search payload preserves exact fund code and source`` () =
+ let payload =
+ """
+ {
+ "schema_version": "fund-lab.akshare.v1",
+ "operation": "search",
+ "source": "akshare",
+ "source_revision": "akshare-1.18.96/eastmoney",
+ "collected_at": "2026-09-21T10:00:00Z",
+ "instruments": [
+ {
+ "code": "000001",
+ "name": "华夏成长混合",
+ "fund_type": "混合型-灵活"
+ }
+ ]
+ }
+ """
+
+ match MarketData.parseSearchPayload payload with
+ | Ok parsed ->
+ let instrument = parsed.Instruments |> List.head
+ Assert.Equal("000001", instrument.Code)
+ Assert.Equal("华夏成长混合", instrument.Name)
+ Assert.Equal(Some "混合型-灵活", instrument.FundType)
+ Assert.Equal("akshare", parsed.Source)
+ | Error message ->
+ Assert.Fail(sprintf "expected valid search payload, got %s" message)