a database layer insipred by caqti and ecto
1open Repodb
2
3let test_show_db_error_not_found () =
4 Alcotest.(check string)
5 "Not_found message" "Record not found"
6 (Error.show_db_error Error.Not_found)
7
8let test_show_db_error_query_failed () =
9 Alcotest.(check string)
10 "Query_failed message" "Query failed: syntax error"
11 (Error.show_db_error (Error.Query_failed "syntax error"))
12
13let test_show_db_error_constraint_violation () =
14 let err =
15 Error.Constraint_violation
16 { constraint_name = "users_email_key"; message = "duplicate key" }
17 in
18 Alcotest.(check string)
19 "Constraint_violation message"
20 "Constraint violation (users_email_key): duplicate key"
21 (Error.show_db_error err)
22
23let test_show_db_error_validation_failed () =
24 let err =
25 Error.Validation_failed [ "name can't be blank"; "email invalid" ]
26 in
27 Alcotest.(check string)
28 "Validation_failed message"
29 "Validation failed: name can't be blank; email invalid"
30 (Error.show_db_error err)
31
32let test_show_validation_error () =
33 let err =
34 Error.
35 { field = "email"; message = "has invalid format"; validation = "format" }
36 in
37 Alcotest.(check string)
38 "validation error format" "email: has invalid format (format)"
39 (Error.show_validation_error err)
40
41let tests =
42 [
43 ("show_db_error Not_found", `Quick, test_show_db_error_not_found);
44 ("show_db_error Query_failed", `Quick, test_show_db_error_query_failed);
45 ( "show_db_error Constraint_violation",
46 `Quick,
47 test_show_db_error_constraint_violation );
48 ( "show_db_error Validation_failed",
49 `Quick,
50 test_show_db_error_validation_failed );
51 ("show_validation_error", `Quick, test_show_validation_error);
52 ]