a database layer insipred by caqti and ecto
at main 2.9 kB view raw
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 ]