Source file opium_testing.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
module Testable = struct
let status = Alcotest.of_pp Opium.Status.pp
let meth = Alcotest.of_pp Opium.Method.pp
let version = Alcotest.of_pp Opium.Version.pp
let body = Alcotest.of_pp Opium.Body.pp
let request = Alcotest.of_pp Opium.Request.pp
let response = Alcotest.of_pp Opium.Response.pp
let cookie = Alcotest.of_pp Opium.Cookie.pp
end
let handle_request app =
let open Lwt.Syntax in
let service = Opium.App.to_handler app in
let request_handler request =
let+ ({ Opium.Response.body; ; _ } as response) = service request in
let length = Opium.Body.length body in
let =
match length with
| None -> Opium.Headers.add_unless_exists headers "Transfer-Encoding" "chunked"
| Some l ->
Opium.Headers.add_unless_exists headers "Content-Length" (Int64.to_string l)
in
{ response with headers }
in
request_handler
;;
let check_status ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> Format.asprintf "HTTP status is %d" (Opium.Status.to_code expected)
in
Alcotest.check Testable.status message expected t
;;
let check_status' ?msg ~expected ~actual = check_status ?msg expected actual
let check_meth ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> Format.asprintf "HTTP method is %s" (Opium.Method.to_string expected)
in
Alcotest.check Testable.meth message expected t
;;
let check_meth' ?msg ~expected ~actual = check_meth ?msg expected actual
let check_version ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> Format.asprintf "HTTP version is %s" (Opium.Version.to_string expected)
in
Alcotest.check Testable.version message expected t
;;
let check_version' ?msg ~expected ~actual = check_version ?msg expected actual
let check_body ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> "bodies are equal"
in
Alcotest.check Testable.body message expected t
;;
let check_body' ?msg ~expected ~actual = check_body ?msg expected actual
let check_request ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> "requests are equal"
in
Alcotest.check Testable.request message expected t
;;
let check_request' ?msg ~expected ~actual = check_request ?msg expected actual
let check_response ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> "responses are equal"
in
Alcotest.check Testable.response message expected t
;;
let check_response' ?msg ~expected ~actual = check_response ?msg expected actual
let string_contains s1 s2 =
let re = Str.regexp_string s2 in
try
ignore (Str.search_forward re s1 0);
true
with
| Not_found -> false
;;
let check_body_contains ?msg s body =
let message =
match msg with
| Some msg -> msg
| None -> "response body contains" ^ s
in
let open Lwt.Syntax in
let+ body = body |> Opium.Body.copy |> Opium.Body.to_string in
Alcotest.check Alcotest.bool message true (string_contains body s)
;;
let check_cookie ?msg expected t =
let message =
match msg with
| Some msg -> msg
| None -> "cookies are equal"
in
Alcotest.check Testable.cookie message expected t
;;
let check_cookie' ?msg ~expected ~actual = check_cookie ?msg expected actual