Source file gen_model_test.ml
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
let template =
{|
open Lwt.Syntax
let testable_{{name}} =
Alcotest.testable {{module}}.pp (fun t1 t2 ->
String.equal t1.{{module}}.id t2.{{module}}.id)
;;
let create _ () =
let* () = Sihl.Cleaner.clean_all () in
let* () = {{module}}.clean () in
let* created = {{module}}.create {{create_values}} |> Lwt.map Result.get_ok in
let* (found : {{module}}.t) =
{{module}}.find created.{{module}}.id |> Lwt.map Option.get
in
Alcotest.(check testable_{{name}} "is same" found created);
Lwt.return ()
;;
let delete' _ () =
let* () = Sihl.Cleaner.clean_all () in
let* () = {{module}}.clean () in
let* created = {{module}}.create {{create_values}} |> Lwt.map Result.get_ok in
let* (found : {{module}}.t) =
{{module}}.find created.{{module}}.id |> Lwt.map Option.get
in
let* _ = {{module}}.delete found in
let* found =
{{module}}.find created.{{module}}.id
in
Alcotest.(check bool "was deleted" true (Option.is_none found));
Lwt.return ()
;;
let find_all _ () =
let* () = Sihl.Cleaner.clean_all () in
let* () = {{module}}.clean () in
let* created1 = {{module}}.create {{create_values}} |> Lwt.map Result.get_ok in
let* created2 = {{module}}.create {{create_values}} |> Lwt.map Result.get_ok in
let* ({{name}}s : {{module}}.t list) = {{module}}.search () |> Lwt.map fst in
Alcotest.(check (list testable_{{name}}) "has {{name}}s" [created2; created1] {{name}}s);
Lwt.return ()
;;
let suite =
Alcotest_lwt.
[ ( "crud {{name}}"
, [ test_case "create" `Quick create
; test_case "delete" `Quick delete'
; test_case "find_all" `Quick find_all
] )
]
;;
let services =
[ Sihl.Database.register (); Service.Migration.register [] ]
;;
let () =
let open Lwt.Syntax in
Logs.set_level (Sihl.Log.get_log_level ());
Logs.set_reporter (Sihl.Log.cli_reporter ());
Lwt_main.run
(let* _ = Sihl.Container.start_services services in
let* () = Service.Migration.execute [ Database.{{module}}.migration ] in
Alcotest_lwt.run "{{name}}" suite)
;;
|}
;;
let dune_file_template database =
let open Gen_core in
match database with
| PostgreSql ->
{|(test
(name test)
(libraries sihl service database alcotest alcotest-lwt
caqti-driver-postgresql {{name}}))
|}
| MariaDb ->
{|(test
(name test)
(libraries sihl service database alcotest alcotest-lwt
caqti-driver-mariadb {{name}}))
|}
;;
let create_values (schema : Gen_core.schema) =
schema
|> List.map snd
|> List.map Gen_core.gen_type_to_example
|> String.concat " "
;;
let test_file (name : string) (schema : Gen_core.schema) =
let params =
[ "name", name
; "module", CCString.capitalize_ascii name
; "create_values", create_values schema
]
in
Gen_core.{ name = "test.ml"; template; params }
;;
let dune_file (database : Gen_core.database) (name : string) =
let params = [ "name", name ] in
Gen_core.{ name = "dune"; template = dune_file_template database; params }
;;