1+ module Client.Tests
2+
3+ open Fable.Mocha
4+ open SAFE
5+
6+ [<RequireQualifiedAccess>]
7+ type RemoteDataCase =
8+ | NotStarted
9+ | LoadingEmpty
10+ | LoadingPopulated
11+ | Loaded
12+
13+ member this.Label =
14+ match this with
15+ | NotStarted -> " Not started"
16+ | LoadingEmpty -> " Loading empty"
17+ | LoadingPopulated -> " Loading populated"
18+ | Loaded -> " loaded"
19+
20+ member this.Example =
21+ match this with
22+ | NotStarted -> RemoteData.NotStarted
23+ | LoadingEmpty -> Loading None
24+ | LoadingPopulated -> Loading( Some true )
25+ | Loaded -> RemoteData.Loaded true
26+
27+ module RemoteDataCase =
28+ let all = [
29+ RemoteDataCase.NotStarted
30+ RemoteDataCase.LoadingEmpty
31+ RemoteDataCase.LoadingPopulated
32+ RemoteDataCase.Loaded
33+ ]
34+
35+
36+ let inline testListForAll < 'T when 'T : equality >
37+ title
38+ ( transformation : RemoteData < bool > -> 'T )
39+ ( expectedMaker : RemoteDataCase -> 'T )
40+ =
41+
42+ testList
43+ title
44+ ( all
45+ |> List.map ( fun case ->
46+ let expected = expectedMaker case
47+
48+ ( fun _ -> Expect.equal ( transformation case.Example) expected " " )
49+ |> testCase case.Label))
50+
51+ let remoteData =
52+ testList " RemoteData" [
53+ RemoteDataCase.testListForAll " defaultValue" ( fun case -> case.DefaultValue false ) ( function
54+ | RemoteDataCase.NotStarted
55+ | RemoteDataCase.LoadingEmpty -> false
56+ | RemoteDataCase.LoadingPopulated
57+ | RemoteDataCase.Loaded -> true )
58+
59+ RemoteDataCase.testListForAll " HasLoaded" (_. HasLoaded) ( function
60+ | RemoteDataCase.NotStarted
61+ | RemoteDataCase.LoadingEmpty
62+ | RemoteDataCase.LoadingPopulated -> false
63+ | RemoteDataCase.Loaded -> true )
64+
65+ RemoteDataCase.testListForAll " AsOption" (_. AsOption) ( function
66+ | RemoteDataCase.NotStarted
67+ | RemoteDataCase.LoadingEmpty -> None
68+ | RemoteDataCase.LoadingPopulated
69+ | RemoteDataCase.Loaded -> Some true )
70+
71+ RemoteDataCase.testListForAll " hasStarted" (_. HasStarted) ( function
72+ | RemoteDataCase.NotStarted -> false
73+ | RemoteDataCase.LoadingEmpty
74+ | RemoteDataCase.LoadingPopulated
75+ | RemoteDataCase.Loaded -> true )
76+
77+ RemoteDataCase.testListForAll " hasData" (_. HasData) ( function
78+ | RemoteDataCase.NotStarted
79+ | RemoteDataCase.LoadingEmpty -> false
80+ | RemoteDataCase.LoadingPopulated
81+ | RemoteDataCase.Loaded -> true )
82+
83+ RemoteDataCase.testListForAll " isStillLoading" (_. IsStillLoading) ( function
84+ | RemoteDataCase.NotStarted -> false
85+ | RemoteDataCase.LoadingEmpty
86+ | RemoteDataCase.LoadingPopulated -> true
87+ | RemoteDataCase.Loaded -> false )
88+
89+ RemoteDataCase.testListForAll " isRefresing" (_. IsRefreshing) ( function
90+ | RemoteDataCase.NotStarted -> false
91+ | RemoteDataCase.LoadingEmpty -> false
92+ | RemoteDataCase.LoadingPopulated -> true
93+ | RemoteDataCase.Loaded -> false )
94+
95+ RemoteDataCase.testListForAll " hasNotStarted" (_. HasNotStarted) ( function
96+ | RemoteDataCase.NotStarted -> true
97+ | RemoteDataCase.LoadingEmpty
98+ | RemoteDataCase.LoadingPopulated
99+ | RemoteDataCase.Loaded -> false )
100+
101+ RemoteDataCase.testListForAll " map" (_. Map( not )) ( function
102+ | RemoteDataCase.NotStarted -> NotStarted
103+ | RemoteDataCase.LoadingEmpty -> Loading None
104+ | RemoteDataCase.LoadingPopulated -> Loading( Some false )
105+ | RemoteDataCase.Loaded -> Loaded false )
106+
107+ testList " bind" [
108+ RemoteDataCase.testListForAll " toLoaded" (_. Bind( Loaded)) ( function
109+ | RemoteDataCase.NotStarted -> NotStarted
110+ | RemoteDataCase.LoadingEmpty -> Loading None
111+ | RemoteDataCase.LoadingPopulated
112+ | RemoteDataCase.Loaded -> Loaded true )
113+
114+ RemoteDataCase.testListForAll " toNotStarted" (_. Bind( fun _ -> NotStarted)) ( function
115+ | RemoteDataCase.NotStarted -> NotStarted
116+ | RemoteDataCase.LoadingEmpty -> Loading None
117+ | RemoteDataCase.LoadingPopulated
118+ | RemoteDataCase.Loaded -> NotStarted)
119+ ]
120+
121+ RemoteDataCase.testListForAll " startLoading" (_. StartLoading()) ( function
122+ | RemoteDataCase.NotStarted -> Loading None
123+ | RemoteDataCase.LoadingEmpty -> Loading None
124+ | RemoteDataCase.LoadingPopulated -> Loading ( Some true )
125+ | RemoteDataCase.Loaded -> Loading ( Some true ))
126+ ]
127+
128+ [<EntryPoint>]
129+ let main _ = Mocha.runTests remoteData
0 commit comments