Skip to content

Commit 923acd5

Browse files
committed
add tests back in
1 parent b36a920 commit 923acd5

7 files changed

Lines changed: 1094 additions & 0 deletions

File tree

.github/workflows/test.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: SAFE meta automated tests
2+
3+
on: push
4+
5+
jobs:
6+
test:
7+
runs-on: ubuntu-latest
8+
9+
steps:
10+
- name: Checkout
11+
uses: actions/checkout@v4
12+
13+
- name: Install Node
14+
uses: actions/setup-node@v4
15+
with:
16+
node-version: 18
17+
18+
- name: Tool Restore
19+
run: dotnet tool restore
20+
21+
- name: Test
22+
working-directory: ./Build
23+
run: dotnet run --project Build.fsproj -- Test

Build/Build.fs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,20 @@ module Processes =
2525
let sourceFolder = Path.getFullName """../src"""
2626
let outputFolder = Path.getFullName """../nugetPackages"""
2727

28+
let clientTestFolder = Path.getFullName """../test/SAFE.Client.Tests"""
29+
2830
let projects = [ "SAFE.Client"; "SAFE.Server" ]
2931

32+
Target.create "Test" (fun _ ->
33+
Npm.install (fun o -> {
34+
o with
35+
WorkingDirectory = clientTestFolder
36+
})
37+
38+
Npm.run "test" (fun o -> {
39+
o with
40+
WorkingDirectory = clientTestFolder
41+
}))
3042

3143
Target.create "Bundle" (fun _ ->
3244
let version = Environment.environVarOrFail "VERSION"

SAFE.Meta.sln

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SAFE.Server", "src\SAFE.Ser
1111
EndProject
1212
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Build", "Build\Build.fsproj", "{F49104E3-DBA9-4A2D-B839-B4E60BCAE698}"
1313
EndProject
14+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{30BCECCE-E11D-4028-A9DE-6A83DF2E3EEC}"
15+
EndProject
16+
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SAFE.Client.Tests", "test\SAFE.Client.Tests\SAFE.Client.Tests.fsproj", "{66BAE342-23E0-4904-B98E-B0679D9370D7}"
17+
EndProject
1418
Global
1519
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1620
Debug|Any CPU = Debug|Any CPU
@@ -32,9 +36,14 @@ Global
3236
{F49104E3-DBA9-4A2D-B839-B4E60BCAE698}.Debug|Any CPU.Build.0 = Debug|Any CPU
3337
{F49104E3-DBA9-4A2D-B839-B4E60BCAE698}.Release|Any CPU.ActiveCfg = Release|Any CPU
3438
{F49104E3-DBA9-4A2D-B839-B4E60BCAE698}.Release|Any CPU.Build.0 = Release|Any CPU
39+
{66BAE342-23E0-4904-B98E-B0679D9370D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40+
{66BAE342-23E0-4904-B98E-B0679D9370D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
41+
{66BAE342-23E0-4904-B98E-B0679D9370D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
42+
{66BAE342-23E0-4904-B98E-B0679D9370D7}.Release|Any CPU.Build.0 = Release|Any CPU
3543
EndGlobalSection
3644
GlobalSection(NestedProjects) = preSolution
3745
{5BCFE180-027E-40F9-847B-7B36F10BD5D7} = {59161B7D-F517-4F4B-B28D-33E34B8A930E}
3846
{0C8F62AC-D5D8-43E6-A4C7-159E530C3CE5} = {59161B7D-F517-4F4B-B28D-33E34B8A930E}
47+
{66BAE342-23E0-4904-B98E-B0679D9370D7} = {30BCECCE-E11D-4028-A9DE-6A83DF2E3EEC}
3948
EndGlobalSection
4049
EndGlobal

test/SAFE.Client.Tests/Program.fs

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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

Comments
 (0)