a database layer insipred by caqti and ecto
1open Repodb
2
3let test_belongs_to () =
4 let assoc =
5 Assoc.belongs_to "post" ~related_table:"posts" ~foreign_key:"post_id" ()
6 in
7 Alcotest.(check string) "name" "post" (Assoc.name assoc);
8 Alcotest.(check string) "related_table" "posts" (Assoc.related_table assoc);
9 Alcotest.(check string) "foreign_key" "post_id" (Assoc.foreign_key assoc);
10 Alcotest.(check bool) "is singular" true (Assoc.is_singular assoc);
11 Alcotest.(check bool) "owner has fk" true (Assoc.owner_has_fk assoc)
12
13let test_has_one () =
14 let assoc =
15 Assoc.has_one "profile" ~related_table:"profiles" ~foreign_key:"user_id" ()
16 in
17 Alcotest.(check string) "name" "profile" (Assoc.name assoc);
18 Alcotest.(check bool) "is singular" true (Assoc.is_singular assoc);
19 Alcotest.(check bool) "owner has fk" false (Assoc.owner_has_fk assoc)
20
21let test_has_many () =
22 let assoc =
23 Assoc.has_many "comments" ~related_table:"comments" ~foreign_key:"post_id"
24 ()
25 in
26 Alcotest.(check string) "name" "comments" (Assoc.name assoc);
27 Alcotest.(check bool) "is plural" true (Assoc.is_plural assoc);
28 Alcotest.(check bool) "is singular" false (Assoc.is_singular assoc)
29
30let test_many_to_many () =
31 let assoc =
32 Assoc.many_to_many "tags" ~related_table:"tags" ~join_table:"post_tags"
33 ~join_keys:("post_id", "tag_id") ()
34 in
35 Alcotest.(check string) "name" "tags" (Assoc.name assoc);
36 Alcotest.(check bool) "is plural" true (Assoc.is_plural assoc)
37
38let test_build_query_belongs_to () =
39 let assoc =
40 Assoc.belongs_to "post" ~related_table:"posts" ~foreign_key:"post_id" ()
41 in
42 let sql = Assoc.build_query assoc "42" in
43 Alcotest.(check bool) "SELECT from posts" true (String.length sql > 0)
44
45let test_build_query_has_many () =
46 let assoc =
47 Assoc.has_many "comments" ~related_table:"comments" ~foreign_key:"post_id"
48 ()
49 in
50 let sql = Assoc.build_query assoc "42" in
51 Alcotest.(check bool) "has query" true (String.length sql > 0)
52
53let test_build_batch_query () =
54 let assoc =
55 Assoc.has_many "comments" ~related_table:"comments" ~foreign_key:"post_id"
56 ()
57 in
58 let sql = Assoc.build_batch_query assoc [ "1"; "2"; "3" ] in
59 Alcotest.(check bool) "has IN clause" true (String.length sql > 0)
60
61let test_many_to_many_query () =
62 let assoc =
63 Assoc.many_to_many "tags" ~related_table:"tags" ~join_table:"post_tags"
64 ~join_keys:("post_id", "tag_id") ()
65 in
66 let sql = Assoc.build_query assoc "42" in
67 Alcotest.(check bool) "has JOIN" true (String.length sql > 0)
68
69let tests =
70 [
71 ("belongs_to", `Quick, test_belongs_to);
72 ("has_one", `Quick, test_has_one);
73 ("has_many", `Quick, test_has_many);
74 ("many_to_many", `Quick, test_many_to_many);
75 ("build_query belongs_to", `Quick, test_build_query_belongs_to);
76 ("build_query has_many", `Quick, test_build_query_has_many);
77 ("build_batch_query", `Quick, test_build_batch_query);
78 ("many_to_many query", `Quick, test_many_to_many_query);
79 ]