-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathtests.nix
95 lines (94 loc) · 3.97 KB
/
tests.nix
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
{ pkgs }:
with pkgs.lib;
with pkgs.haskell.lib;
let
generateCode = { fileName, extraFlags ? [ ] }:
{
name = builtins.replaceStrings [ "_" ] [ "-" ] (strings.removeSuffix ".yaml" (strings.removeSuffix ".json" (strings.removeSuffix ".yml" fileName)));
path = pkgs.generateOpenAPIClient {
name = "openapi";
src = ../specifications + "/${fileName}";
extraFlags = extraFlags;
};
};
goldenTestCode = generateCode { fileName = "z_complex_self_made_example.yml"; };
codeForSpecsLevelOne = [
(generateCode { fileName = "google-payment.json"; })
(generateCode { fileName = "hetzner.json"; })
(generateCode { fileName = "official-api-with-examples.yaml"; })
(generateCode { fileName = "official-callback-example.yaml"; })
(generateCode { fileName = "official-link-example.yaml"; })
(generateCode { fileName = "official-petstore-expanded.yaml"; })
(generateCode { fileName = "official-uspto.yaml"; })
(generateCode { fileName = "petstore-expanded.json"; })
(generateCode { fileName = "selenium.yaml"; extraFlags = [ "--response-type-suffix=\"Response'\"" ]; })
(generateCode { fileName = "spot_api.yml"; extraFlags = [ "--opaque-schema=\"aggTrade\"" ]; })
(generateCode { fileName = "uber.json"; })
(generateCode { fileName = "z_complex_self_made_example.yml"; })
];
codeForSpecsLevelTwo = [
(generateCode { fileName = "official-petstore.yaml"; })
(generateCode { fileName = "petstore-running-example.yaml"; })
(generateCode { fileName = "stripe-api.yml"; extraFlags = [ "--property-type-suffix=\"'\"" "--convert-to-camel-case" ]; })
];
codeForSpecsLevelThree = [
(generateCode { fileName = "petstore-running-example.yaml"; })
];
mockServer = disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "level-3-mock-server" (../testing/level3/mock-server) { }));
in
{
testSystem1 = pkgs.symlinkJoin {
name = "test-system-1";
paths = (builtins.map
(pkg:
disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "${pkg.name}-compiled" pkg.path { }))
)
codeForSpecsLevelOne);
};
testSystem2 = pkgs.symlinkJoin {
name = "test-system-2";
paths = (builtins.map
(pkg:
let
openapi = disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "${pkg.name}-compiled" pkg.path { }));
base = disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "level2-base" ../testing/level2/level2-base { openapi = openapi; }));
in
disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "${pkg.name}-tests" (../testing/level2 + "/${pkg.name}") { level2-base = base; openapi = openapi; }))
)
codeForSpecsLevelTwo);
};
testSystem3 = pkgs.symlinkJoin {
name = "test-system-3";
paths = (builtins.map
(pkg:
let
openapi = disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "${pkg.name}-compiled" pkg.path { }));
in
overrideCabal (disableOptimization (disableLibraryProfiling (pkgs.haskellPackages.callCabal2nix "${pkg.name}-tests" (../testing/level3 + "/${pkg.name}") { openapi = openapi; }))) (old: {
preCheck = (old.preCheck or "") + ''
${pkgs.killall}/bin/killall -r mock-server-exe || true
${mockServer}/bin/mock-server-exe &
'';
postCheck = (old.postCheck or "") + ''
${pkgs.killall}/bin/killall -r mock-server-exe
'';
})
)
codeForSpecsLevelThree);
};
testGolden = pkgs.stdenv.mkDerivation {
name = "test-golden";
src = ../testing/golden-output;
buildCommand = ''
diff -r ${goldenTestCode.path} $src
mkdir -p $out
echo "Golden test success" > $out/success
'';
};
testGoldenGenerate = pkgs.stdenv.mkDerivation {
name = "test-golden-generate";
buildCommand = ''
cp -R ${goldenTestCode.path} $out
'';
};
}