namespace FundLab.Web.Tests open Xunit open FundLab.Web module ChartTests = [] let ``chart points preserve chronological order and normalize NAV values`` () = let observations : NavObservation list = [ { navDate = "2026-01-01"; nav = "1.00000000"; dailyReturn = None } { navDate = "2026-01-02"; nav = "1.25000000"; dailyReturn = Some "25.00000000" } { navDate = "2026-01-03"; nav = "1.10000000"; dailyReturn = Some "-12.00000000" } ] let points = Chart.chartPoints observations Assert.Equal(3, points.Length) Assert.Equal(0.0, points[0].x) Assert.Equal(1.0, points[1].y) Assert.Equal(0.4, points[2].y) Assert.Equal("2026-01-03", points[2].navDate) [] let ``series points keep the shared date axis and normalize each series`` () = let dates = [ "2026-01-01"; "2026-01-02"; "2026-01-03" ] let values = [ "2026-01-01", "100.00" "2026-01-02", "150.00" "2026-01-03", "125.00" ] let points = Chart.seriesPoints dates values Assert.Equal(3, points.Length) Assert.Equal(0.0, points[0].x) Assert.Equal(0.5, points[1].x) Assert.Equal(1.0, points[2].x) Assert.Equal(0.0, points[0].y) Assert.Equal(1.0, points[1].y) Assert.Equal(0.5, points[2].y) Assert.Equal("150.00", points[1].value) [] let ``series points skip missing dates instead of filling zero`` () = let dates = [ "2026-01-01"; "2026-01-02"; "2026-01-03" ] let values = [ "2026-01-01", "100.00" "2026-01-03", "125.00" ] let points = Chart.seriesPoints dates values Assert.Equal(2, points.Length) Assert.Equal(0.0, points[0].x) Assert.Equal(1.0, points[1].x) Assert.Equal("2026-01-03", points[1].label) [] let ``a single point is centered and keeps no line`` () = let points = Chart.seriesPoints [ "2026-01-01" ] [ "2026-01-01", "1.00000000" ] Assert.Equal(1, points.Length) Assert.Equal(0.5, points[0].x) Assert.Equal(0.5, points[0].y)