summaryrefslogtreecommitdiff
path: root/tests/FundLab.Web.Tests/ChartTests.fs
blob: 0382b0ad7675e37db65afec88351edb64175687b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
namespace FundLab.Web.Tests

open Xunit
open FundLab.Web

module ChartTests =

    [<Fact>]
    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)

    [<Fact>]
    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)

    [<Fact>]
    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)

    [<Fact>]
    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)